コードファーストのシナリオから Entity Framework (6) を独学で学び始めたところです。私の問題は、特定のエンティティが他のエンティティ間で共有される可能性があることを EF に正しく指示する方法がわからないことです。
これは、3 レベルのツリー構造を持つ非常に単純なシナリオです。クラスA
オブジェクトは、クラスB
オブジェクトを所有または参照するクラス オブジェクトを所有しC
ます。
public class A
{
[Key]
public string Id { get; set; }
public ICollection<B> Bees { get; set; }
public override string ToString() { return Id; }
}
public class B
{
[Key]
public string Id { get; set; }
public ICollection<C> Cees { get; set; }
public override string ToString() { return Id; }
}
public class C
{
[Key]
public string Id { get; set; }
public override string ToString() { return Id; }
}
ここで、1 つのオブジェクトが 5 つのオブジェクトをA
所有し、5つのオブジェクトのコレクションを共有するシナリオを作成します。私が使用したDbContextは次のとおりです。B
C
public class Context : DbContext
{
public DbSet<A> As { get; set; }
public DbSet<C> Cs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// SHOULD I INSTRUCT EF HOW TO HANDLE THIS HERE?
base.OnModelCreating(modelBuilder);
}
public Context(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
}
このシナリオを設定するための簡単なコードを次に示します。
internal class Program
{
private static void Main(string[] args)
{
var context = new Context(@"Data Source=(localdb)\v11.0; Initial Catalog=TestEF6.Collections; Integrated Security=true");
var sharedCees = createCees("A1.B1", 5, context);
context.As.Add(new A { Id = "A1", Bees = createBees("A1", 5, sharedCees) });
context.SaveChanges();
}
private static ICollection<B> createBees(string aId, int count, ICollection<C> cees = null)
{
var list = new List<B>();
for (var i = 0; i < count; i++)
{
var id = aId + ".B" + (i + 1);
list.Add(new B { Id = id, Cees = cees ?? createCees(id, count) });
}
return list;
}
private static ICollection<C> createCees(string bId, int count, Context saveInContext = null)
{
var list = new List<C>();
for (var i = 0; i < count; i++)
{
var id = bId + ".C" + (i+1);
var c = new C {Id = id};
list.Add(c);
if (saveInContext != null)
saveInContext.Cs.Add(c);
}
if (saveInContext != null)
saveInContext.SaveChanges();
return list;
}
}
EF がデータベース ('TestEF6.SharedEntities') を作成するとき、 1 対多の関係であるA -> B
だけでなくB -> C
、子エンティティがコンポーネントであり、そのマスター エンティティによって完全に所有および制御されていると想定します。
C
では、 のインスタンスが のインスタンスで共有できることを EF に「認識」させるにはどうすればよいB
でしょうか。
正直なところ、私は EF を手早く始めたいと思っています。私はウェブを耕してこれを理解できることを認識していますが、誰かが私を正しい方向に向けることができれば、とても感謝しています.
乾杯