1

コレクションを持つEntity Frameworkエンティティでプロパティを初期化する方法はありますか?

これは、コレクションを持つエンティティに対して生成されたコードです。

public partial class MyEntity
{
    public MyEntity()
    {
       this.MySubEntities = new HashSet<MySubEntity>();
    }

    public bool IsActive {get; set;}
    public virtual ICollection<MySubEntity> MySubEntities {get; set;}
}

MyEntityデフォルトにしたい新しいものを作成する必要がある場合IsActive = true、それはできません! (T4 テンプレートを編集しない限り。)

IsActive = True生成されたファイル (または T4) を編集せずにデフォルトにする方法があることを教えてください。

注: AutoMapper でエンティティを作成しているため、機能しませんnew MyEntity {IsActive = true}

4

3 に答える 3

0

T4 を編集しないと、何ができるのかわかりません。

したがって、T4を変更してそのようなものを生成できます(ctorで行う代わりに、getterでnullリストを初期化します)

private ICollection<MySubEntity> mySubEntities_;
public virtual ICollection<MySubEntity> MySubEntities {
   get {
        return mySubEntites_ ?? (mySubEntites_ = new HashSet<MySubEntity>());
   }
   set {
       mySubEntities_ = value;
   }
}

そうすれば、生成されたクラスに空のctorは必要なくなり、空のctorを持つ部分クラスを作成して、必要なことを行うことができます

public MyEntity() {
   IsActive = true;
}
于 2013-08-23T00:43:55.757 に答える
0

よくわかりませんが、ご覧いただけるように、いくつかの指示を出します。

データベースのデフォルト値を IsActive = true に設定すると、EF がこれを自動的に処理すると思います。そうでない場合は、デザイナーでデフォルト値を設定できると確信しています。

これは部分クラスなので、別のコンストラクターを実行することもできると思います。

あなたはこれを読むかもしれません:EF CFでPOCOのデフォルト値を設定する方法は?より多くの洞察を与えるかもしれません。

別の解決策 (実用的ですが、良くなく、質問に答えませんでした) は、IsActive を IsInactive に変更して、デフォルトを false にすることです:D - データベースを設計するときに実際にこれを行います。

于 2013-08-23T00:54:28.430 に答える
0

EF モデルを編集して、既定値を追加できます。列のプロパティで、「デフォルト値」を見つけて、必要なものに設定できます。デフォルトでは「(なし)」に設定されています。

于 2019-11-11T15:12:53.677 に答える