Невозможно определить допустимый порядок зависимых операций

Я использую Entity Framework 4.1. У меня есть таблица «DomainEntities», в которой содержится общая информация для всех объектов моего домена. У меня есть таблица пользователей, где UserID является внешним ключом из "DomainEntities".

см. EDMX: файл EDMX

Когда я запускаю следующий код, я получаю сообщение об ошибке:

Не удалось определить допустимый порядок зависимых операций. Зависимости могут существовать из-за ограничений внешнего ключа, требований модели или значений, сгенерированных хранилищем.

Код:

static void addUserTest()
{
    DomainEntity userToAdd = new DomainEntity()
    {
        EntityName = "Test User",
        EntityTypeID = DomainEntity.eEntityType.User,
        EntityCreationDate = new DateTime(),
        EntityLastUpdateDate = new DateTime(),
        EntityCreatorUserID = 0,
        EntityUpdaterUserID = 0,
        EntityParentID = null,
        UserDetails = new User()
        {
            Username = "TestUser",
            Password = "123",
            FirstName = "Test",
            LastName = "User"

        }
    };

    using (var context = new CamelotDB())
    {
        context.DomainEntities.Add(userToAdd);
        context.SaveChanges();
    }

}

Я не могу понять, по какой причине EF может понять, какой порядок INSERT требуется. Это должна быть одна запись в «DomainEntities», а затем одна запись в «Пользователи». Что я делаю неправильно ?


person Mortalus    schedule 29.12.2012    source источник


Ответы (2)


После поиска еще один день я обнаружил, что проблема была с внешними ключами Creator и Updater, на которые ссылаются сами себя.

CreatorID не имеет значения Nullable, как и UpdaterID, и поэтому EF требует, чтобы свойства навигации указывали на фактические объекты из базы данных, поэтому я добавил следующие строки в инициализатор тестового пользователя.

EntityCreatorUserID = 0,
Creator = context.DomainEntities.Find(0),
EntityUpdaterUserID = 0,
Updater = context.DomainEntities.Find(0),
person Mortalus    schedule 30.12.2012
comment
У меня была такая же проблема со схемой EF6.1 Code First. Мы изменили FK объекта, который раньше указывал на себя через строку (которая допускает значение NULL), на тип int. Миграция прошла успешно, но любая попытка сохранить этот объект взорвется с расплывчатой ​​ошибкой Невозможно определить допустимый порядок... исключение. Избавился от ссылки на класс, и это было решено. Интересно, что FK в db не имел значения, просто EF знал об этом. - person Chris Moschini; 04.03.2015

Кажется, что вместо того, чтобы ваш User был связан с вашим DomainEntity, вы должны сделать свой User подклассом DomainEntity. В конструкторе моделей объектов это делается с помощью инструмента «Наследование» (дважды щелкните инструмент «Наследование» на панели инструментов, затем щелкните один раз родительский объект и один раз — дочерний объект).

Это более точно описывает природу User; User является DomainEntity. Ваша текущая модель предполагает, что User связано с DomainEntity, что кажется неправильным.

person Uchendu Nwachuku    schedule 29.12.2012
comment
Извините, это не имеет ничего общего с типом отношения между пользователем и DomainEntity. Есть 2 способа структурирования (таблица на иерархию и таблица на тип). Я использую второй, поэтому не использую наследование. Я должен иметь какое-то отношение к циклическим отношениям в DomainEntity. - person Mortalus; 30.12.2012