我已經閱讀了很多關於使用EF在stackoverflow上的外鍵問題及其建議解決方案的問題。但沒有人爲我的案件工作。帶實體框架代碼的外鍵第一種方法
我有一個父類XSection
public class XSection
{
public int ObjectId {get; set;}
public OverBank LeftOverBank {get; set;}
public OverBank RightOverBank {get; set;}
}
的overbanks是子實體父Xsection類(僅一個不在名單)。該OverBanks類看起來喜歡
public class OverBank
{
public int ObjectId {get; set;}
public int ParentId (get; set;}
public double Station {get; set;}
// some other basic properties
}
的DDL上述類生成的是:
截面表:
CREATE TABLE CrossSection (
ObjectID INTEGER NOT NULL,
LeftOverbank_ObjectID INTEGER NULL,
RightOverbank_ObjectID INTEGER NULL,
PRIMARY KEY (ObjectID),
FOREIGN KEY (LeftOverbank_ObjectID) REFERENCES Overbank (ObjectID) ON DELETE CASCADE,
FOREIGN KEY (RightOverbank_ObjectID) REFERENCES Overbank (ObjectID) ON DELETE CASCADE,
);
CREATE INDEX IX_FK_CrossSection_LeftOverbank ON CrossSection (LeftOverbank_ObjectID);
CREATE INDEX IX_FK_CrossSection_RightOverbank ON CrossSection (RightOverbank_ObjectID);
漫灘表
CREATE TABLE Overbank (
ObjectID INTEGER NOT NULL,
Station real NULL,
DisplayLabel text NULL,
Description text NULL,
Name text NULL,
PRIMARY KEY (ObjectID),
);
要啓用級聯刪除,我在OnModelCreating事件中編寫了以下內容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity <CrossSection>()
.ToTable("CrossSection");
modelBuilder.Entity <Overbank>()
.ToTable("Overbank");
modelBuilder.Entity<CrossSection>().HasOptional(xs => xs.LeftOverbank).WithMany().WillCascadeOnDelete(true);
modelBuilder.Entity<CrossSection>().HasOptional(xs => xs.RightOverbank).WithMany().WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
}
我們可以看到外鍵約束被顛倒過來。另外當我刪除橫斷面相關的銀行不刪除,而當我刪除銀行相關的橫斷面被刪除。而我們需要與我們現在所擁有的完全相反。有什麼非常愚蠢的。
是你寫的所有映射配置嗎?還是有更多? –
我編輯了完整的OnModelCreating事件。 – Mohit