在重寫DatabaseInitializer的「Seed」方法時,我已經將一些項目添加到上下文中,但我得到了參考完整性錯誤,我推測因爲項目正在被添加以錯誤的順序到數據庫。訂單如何定義?EF代碼優先:嵌入項目的插入順序
在生成db之後,我可以使用原始SQL將項目添加到數據庫,因此我不認爲數據有任何問題。
E.g.
new List<PropertyType>
{
new PropertyType {Name = "Text"},
new PropertyType {Name = "Colour"},
new PropertyType {Name = "Image"}
}.ForEach(e => context.PropertyTypes.Add(e));
base.Seed(context);
new List<Property>
{
new Property {Name = "font", PropertyTypeId = 1},
new Property {Name = "colour", PropertyTypeId = 2},
new Property {Name = "background-image", PropertyTypeId = 3}
}.ForEach(e => context.Properties.Add(e));
base.Seed(context);
我可以運行它自己的第一個種子,它的工作原理。第二顆種子引起參照完整性錯誤。完全簡單的關係。
public class Property
{
[Key]
public int PropertyId { get; set; }
[Required, StringLength(100)]
public string Name { get; set; }
[Required]
public int PropertyTypeId { get; set; }
public PropertyType PropertyType { get; set; }
}
public class PropertyType
{
[Key]
public int PropertyTypeId { get; set; }
[Required, StringLength(50)]
public string Name { get; set; }
public IList<Property> Properties { get; set; }
}
什麼是'base.Seed'? – 2012-02-23 12:46:04
它調用基類版本的種子。我試着把它拿出來。沒什麼區別。我認爲我在某處讀取它調用它可以捕獲上述代碼中的錯誤,但我不認爲它是這樣做的。 – 2012-02-23 12:51:00
這取決於什麼初始值設定項是您的父類。默認初始值設定項使此方法爲空。 「二次種子」又是什麼意思?這兩部分是一起執行的嗎? – 2012-02-23 13:13:11