我有以下使用实体框架映射的模型:Mitglied -> Auftrag -> Teilprojekt
我已经使用外键和“删除级联”在数据库中设置了所有内容。如果我对数据库执行一些测试,一切正常。当我使用实体框架添加和删除对象时,问题就出现了。考虑以下代码:
Mitglieder m1 = new Mitglieder();
m1.Name = "erstes";
Auftraege a1 = new Auftraege();
a1.Name = "a1";
m1.Auftraege.Add(a1);
Teilprojekte t1 = new Teilprojekte();
t1.Name = "t1";
a1.Teilprojekte.Add(t1);
context.AddToMitglieder(m1);
Mitglieder m2 = new Mitglieder();
m2.Name = "zweites";
Auftraege a2 = new Auftraege();
a2.Name = "a2";
m2.Auftraege.Add(a2);
Teilprojekte t2 = new Teilprojekte();
t2.Name = "t2";
a2.Teilprojekte.Add(t2);
context.AddToMitglieder(m2);
context.SaveChanges();
这会正确添加所有对象并设置外键。如果我然后执行以下代码来删除 Auftraege:
var members = context.Mitglieder.ToList();
var mem1 = members.Single(m => m.Name == "erstes");
mem1.Auftraege.Load();
var auf1 = mem1.Auftraege.First();
context.DeleteObject(auf1);
var mem2 = members.Single(m => m.Name == "zweites");
mem2.Auftraege.Load();
var auf2 = mem2.Auftraege.First();
//THIS IS THE LINE THAT MAKES THE DIFFERENCE
auf2.Teilprojekte.Load();
context.DeleteObject(auf2);
context.SaveChanges();
正确删除了两个 Auftraege a1 和 a2;Teilprojekt t1 也被删除,但 Teilprojekt t2 没有被删除;
它的 AuftragID 列设置为 NULL!
唯一的区别是,对于 a1,我没有加载 Teilprojekte,而对于 a2,我确实加载了它们。我不明白为什么这不能正常工作。同样在 SSDL 中,一切都设置正确:
<Association Name="FK_Auftraege_Mitglieder">
<End Role="Mitglieder" Type="TechnBuero.Store.Mitglieder" Multiplicity="0..1">
<OnDelete Action="Cascade" />
</End>
<End Role="Auftraege" Type="TechnBuero.Store.Auftraege" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Mitglieder">
<PropertyRef Name="ID" />
</Principal>
<Dependent Role="Auftraege">
<PropertyRef Name="Mitglieder_ID" />
</Dependent>
</ReferentialConstraint>
</Association>
</Association>
<Association Name="FK_Teilprojekte_Auftraege">
<End Role="Auftraege" Type="TechnBuero.Store.Auftraege" Multiplicity="0..1">
<OnDelete Action="Cascade" />
</End>
<End Role="Teilprojekte" Type="TechnBuero.Store.Teilprojekte" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Auftraege">
<PropertyRef Name="ID" />
</Principal>
<Dependent Role="Teilprojekte">
<PropertyRef Name="AuftragsID" />
</Dependent>
</ReferentialConstraint>
</Association>
如果我将 Teilprojekte 表上的 AuftragsID 设置为不为空,那么我会从实体框架中收到以下错误:
Error 1 Error 3023: Problem in Mapping Fragments starting at lines 638, 702: Column Teilprojekte.AuftragsID has no default value and is not nullable. A column value is required to store entity data.
An Entity with Key (PK) will not round-trip when:
((PK is in 'Teilprojekte' EntitySet OR PK plays Role 'Teilprojekte' in AssociationSet 'FK_Teilprojekte_Auftraege') AND (PK is NOT in 'Teilprojekte' EntitySet OR PK does NOT play Role 'Teilprojekte' in AssociationSet 'FK_Teilprojekte_Auftraege'))
谁能帮助我并告诉我出了什么问题以及如何解决这个问题?谢谢