事実上再帰参照を必要とするPOCOコードの最初のモデルがあります。エンティティを作成しようとすると、タイトルのとおり、「ロールへの変更が競合しています...」というエラーが表示されます。
問題を説明するための単純化されたクラスのセットを次に示します。
public class Master
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Query2 Query { get; set; }
}
public class Query2
{
public Query2()
{
Columns = new List<Column2>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Column2> Columns { get; set; }
}
public class Column2
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Query2 Query { get; set; }
}
問題は、プロパティ Column2.Query に存在します。
自動サンプル データを生成するコードは次のとおりです。
public class TestContext : DbContext
{
public TestContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
public DbSet<Master> Masters { get; set; }
public DbSet<Query2> Queries { get; set; }
public DbSet<Column2> Columns { get; set; }
}
public class TestContextInitializer : DropCreateDatabaseIfModelChanges<TestContext>
{
protected override void Seed(TestContext context)
{
Master master = new Master() { Name = "Test" };
master.Query = new Query2() { Name = "Query1" };
Column2 col = new Column2() { Name = "Column1" };
master.Query.Columns.Add(col);
col.Query = new Query2() { Name = "Query2" };
col.Query.Columns.Add(new Column2() { Name = "Column2" });
context.Masters.Add(master);
}
}
そして、これはエラーを引き起こします:
private void Test2()
{
ZapDatabase(@"D:\Visual Studio\TestDPDatabase\TestDPDatabase\TestContext.sdf");
System.Data.Entity.Database.SetInitializer<TestContext>(new TestContextInitializer());
using (TestContext cont = new TestContext())
{
var result = cont.Masters.Include("Query").Include("Query.Columns").Include("Query.Columns.Query").Include("Query.Columns.Query.Columns").ToList();
int objects = result.Count;
}
}
このエラーを報告して解決策を探している人々の多くのインスタンスを確認しましたが、そのすべてが答えを理解できますが、この再帰構造を持っている人はいません。
提供された支援に感謝します。