0
我試圖設計一個代碼優先模型與TPH查找表如下所示:問題建立EF5和查找表
public abstract class LookupValue
{
[Key]
public string Value { get; set; }
}
public class PaymentTerm : LookupValue {}
public class ShippingCode : LookupValue {}
public class ReviewStatus : LookupValue {}
public class RecordStatus : LookupValue {}
我想實體框架生成與鑑別表,它的作用如下:
CREATE TABLE [LookupValues] (
[Value] [nvarchar](30) NOT NULL,
[Discriminator] [nvarchar](128) NOT NULL,
CONSTRAINT [PK_dbo.LookupValues] PRIMARY KEY ([Value])
)
在我的上下文OnModelCreating覆蓋,我定義如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<PaymentTerm>()
.Map(m => m.Requires("Discriminator").HasValue("PaymentTerm"));
modelBuilder.Entity<ShippingCode>()
.Map(m => m.Requires("Discriminator").HasValue("ShippingCode"));
modelBuilder.Entity<ReviewStatus>()
.Map(m => m.Requires("Discriminator").HasValue("ReviewStatus"));
modelBuilder.Entity<RecordStatus>()
.Map(m => m.Requires("Discriminator").HasValue("RecordStatus"));
}
我想用這些查找對象如下:
public class Customer {
....
[Required]
public virtual PaymentTerm Terms { get; set; }
[Required]
public virtaul ShippingCode ShippingCode { get; set; }
[Required]
public virtual ReviewStatus ReviewStatus { get; set; }
[Required]
public virtual RecordStatus RecordStatus { get; set; }
...
}
我可以創建代碼優先遷移,但是當我嘗試更新數據庫時,出現錯誤
的引用關係將導致不允許週期性參考...
我已經想通了,這是由於SQL腳本生成如下ON DELETE CASCADE
:
ALTER TABLE [Customer] ADD CONSTRAINT [FK_dbo.Customer_dbo.LookupValues_ShippingCode_Value] FOREIGN KEY ([ShippingCode_Value]) REFERENCES [LookupValues] ([Value]) ON DELETE CASCADE
ALTER TABLE [Customer] ADD CONSTRAINT [FK_dbo.Customer_dbo.LookupValues_PaymentTerms_Value] FOREIGN KEY ([PaymentTerms_Value]) REFERENCES [LookupValues] ([Value]) ON DELETE CASCADE
ALTER TABLE [CustomerClinicDoctors] ADD CONSTRAINT [FK_dbo.Customer_dbo.LookupValues_RecordStatus_Value] FOREIGN KEY ([RecordStatus_Value]) REFERENCES [LookupValues] ([Value]) ON DELETE CASCADE
ALTER TABLE [Customer] ADD CONSTRAINT [FK_dbo.Customer_dbo.LookupValues_ReviewStatus_Value] FOREIGN KEY ([ReviewStatus_Value]) REFERENCES [LookupValues] ([Value]) ON DELETE CASCADE
我已經讀過,我應該把.WillCascadeOnDelete(false)
放在流利的api中,但我不能接受它。希望得到一些幫助...
如何關閉這些關係上的DELETE CASCADE。我並不打算真的需要刪除查找值的功能,而只是想在我的Repository中使用一個簡單的代碼接口。