在重写DatabaseInitializer的“Seed”方法时,我已经向上下文添加了一些项目但是我得到了参数完整性错误,我认为这是因为项目以错误的顺序添加到数据库中。如何定义订单?
我可以在生成数据库之后使用原始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; }
}
答案 0 :(得分:2)
不完全是我想要的但是这有用......
new List<PropertyType>
{
new PropertyType
{
Name = "Text",
Properties = new List<Property> {new Property {Name = "font"}}
},
new PropertyType
{
Name = "Colour",
Properties = new List<Property> {new Property {Name = "color"}}
},
new PropertyType
{
Name = "Image",
Properties = new List<Property> {new Property {Name = "background-image"}}
}
}.ForEach(e => context.PropertyTypes.Add(e));
答案 1 :(得分:0)
插入顺序由您的模型定义。如果在数据库中有参照约束,则必须正确设置模型以反映关系中的约束(导航属性),否则EF不知道这些约束。
您可以使用context.Database.ExecuteSqlCommand