EF Code First: порядок вставки для отобранных предметов - PullRequest
0 голосов
/ 23 февраля 2012

В переопределении метода «Seed» DatabaseInitializer я добавил некоторые элементы в контекст, но я получаю ошибки ссылочной целостности, которые, как я полагаю, добавляются в базу данных в неправильном порядке. Как определяется порядок?

Я могу добавить элементы в базу данных с помощью необработанного SQL после того, как база данных была сгенерирована, поэтому я не думаю, что с данными что-то не так.

* 1005 Е.Г. *

            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 ]

2 голосов
/ 24 февраля 2012

Не совсем то, что я искал, но это работает ...

            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));
0 голосов
/ 23 февраля 2012

Порядок вставок определяется вашей моделью.Если у вас есть ссылочные ограничения в базе данных, вы должны правильно настроить свою модель для отражения этих ограничений в отношениях (свойствах навигации), в противном случае EF не будет знать об этих ограничениях.

Вы можете заполнять данные с помощью RAW SQL, используя context.Database.ExecuteSqlCommand

...