2016-11-05 14 views
2

非常に基本的なものですが、私のGoogle-fuは失敗しています。ReadOnly Entity Frameworkで設定できるプロパティ

Activeプロパティを読み込み専用にするドメインオブジェクト、たとえばUserがあります。しかし、データベースからロードされたときに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を設定する必要があります。

アーキテクチャ(それが重要な場合):

  • UserクラスEF6クラスコンフィギュレーションがDataプロジェクト
  • を介して行われる
  • Domainプロジェクトに存在するEF6が流暢APIの設定を使用するには、(のうちのORMのものを保持します私のドメインプロジェクト)
  • EF6はDTOを使用せず、ドメインクラスを直接設定します

質問

どのように強制する(または少なくとも警告)user.Activeを設定していない開発者をできますか?少なくとも、コンパイル時の警告([Obsolete]に似ています)を設定者に提供して、通知を受けることはできますか?

おかげで、

答えて

2

あなたの問題を解決し、必要なプロジェクトにそれを公開すると、他のプロジェクトにそれが私的にするために友人のアセンブリを使用することができます。

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

ああ、はい、それについて忘れました。それは、ありがとう! – jleach

+0

私は助けてくれると嬉しいです:) – MacakM

関連する問題