2016-11-05 64 views
2

非常基本,但我的Google-fu讓我失望。ReadOnly實體框架可以設置的屬性

我有一個域對象,說用戶,我希望活動屬性只能讀取。但是,從數據庫加載時,需要通過EF(6)設置屬性。

表:

CREATE TABLE Users (
    ID INT NOT NULL PRIMARY KEY CLUSTERED, 
    Active BIT NOT NULL DEFAULT 1 
    -- other stuff 
); 

類:

public class User 
{ 
    public int ID { get; set; } 
    public bool Active { get; set; } // this should be RO 

    public void Activate() { 
     Active = true; 
     this.AddChangelog(ChangeType.Activation, "Activated"); 
    } 

    public void Deactivate() { 
     Active = false; 
     this.AddChangelog(ChangeType.Activation, "Deactivated"); 
    } 

    // changelogging, etc. 
} 

開發者不應該直接改變Active,而是應該使用Activate()Deactivate()方法。然而,EF6需要直接設置Active,因此它可以實例化對象。

架構(如果它的事項):

  • 用戶類Domain項目
  • EF6級配置是通過Data項目
  • EF6做存在使用流利的API配置(保持ORM的東西出來的我的域名項目)
  • EF6不使用DTO,但直接配置域類

問題

我怎麼能強制執行(或至少警告),開發者不能設置user.Active?至少,我可以提供一些編譯時警告(類似於[Obsolete])給setter,以便他們得到通知?

感謝,

回答

2

你可以用朋友組件,以解決您的問題,並把它公開到您想要並使其私人其他項目的項目。

[assembly:InternalsVisibleTo("cs_friend_assemblies_2")] 
+0

啊,是的,忘了這一切。它會做,謝謝! – jleach

+0

我很高興能幫上忙:) – MacakM