EF Code First:种子项目的插入顺序

时间:2012-02-23 12:04:19

标签: entity-framework-4.1 ef-code-first

在重写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; }
}

2 个答案:

答案 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

为RAW SQL播种数据