エンティティオブジェクトが直接作成されないようにする必要があるシナリオに直面しています。
私はCodeFirstを使用しています。オブジェクトを作成できるはずのメソッドをどこかに使用したいのですが。これによく使われる方法はありますか?
エンティティオブジェクトが直接作成されないようにする必要があるシナリオに直面しています。
私はCodeFirstを使用しています。オブジェクトを作成できるはずのメソッドをどこかに使用したいのですが。これによく使われる方法はありますか?
EFは、プライベート/保護されたコンストラクターを持つエンティティーと連携できます。
それでは、このサンプルコンテキストを見てみましょう。
public class MyEntity
{
protected MyEntity() { }
public int Id { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; set; }
}
次に、でエンティティを作成するnew MyEntity()
と、コンパイルエラーが発生します。
ただし、 DbSet.Create を使用してEFを介してエンティティを作成することはできます。myContext.MyEntities.Create();
他のすべての操作(MyEntity
クエリや更新など)は期待どおりに機能します。
そしてもちろんMyEntity
、オブジェクトの作成を管理する静的ファクトリメソッドを使用することもできます
public class MyEntity
{
//...
public static MyEntity MyCreate()
{
return new MyEntity();
}
}