Entity Framework создает исключение DbUpdateException, если не существует значения базы данных для внешнего ключа - PullRequest
0 голосов
/ 21 мая 2018

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

Например, когда я отправляю полный объект для обновления, но со свойством [Guid?IdEnterpriseGroup] со значением ошибки [GUID, не существующий в базе данных], Entity Framework не проверяет внешний ключ перед выполнением в базе данных и возвращает исключение.

Я собираюсь описать свои сценарии, чтобы кто-то помог мне.

Мой класс сущности Company будет ниже:

public class Company : DeletableCrudBase
{
    public Company()
    {
        IdCompany = Guid.NewGuid();
    }

    public virtual Guid? IdCompany { get; set; }

    public virtual string SocialName { get; set; }

    public virtual string FantasyName { get; set; }

    public virtual Guid? IdEnterpriseGroup { get; set;}

    public virtual EnterpriseGroup EnterpriseGroup { get; set; }

    public virtual IList<UserCompany> UserCompanies { get; set; }

    public virtual IList<CompanyAddress> CompanyAddresses { get; set; }

    public virtual IList<CompanyContact> CompanyContacts { get; set; }
}

Мой сопоставленный класс с беглым владением:

public class CompanyConfiguration : EntityTypeConfiguration<Company>
{
    public CompanyConfiguration()
    {
        ToTable("ADM_COMPANY");

        HasKey(c => new { c.IdCompany });

        Property(c => c.IdCompany)
            .HasColumnName("ID_COMPANY");

        Property(c => c.IdEnterpriseGroup)
            .HasColumnName("ID_ENTERPRISE_GROUP")
                .IsRequired();

        Property(c => c.SocialName)
            .IsRequired()
                .HasMaxLength(128)
                    .HasColumnName("SOCIAL_NAME");

        Property(c => c.FantasyName)
            .HasMaxLength(512)
                .HasColumnName("FANTASY_NAME");

        // Relationship
        HasMany(company => company.UserCompanies)
            .WithRequired(userCompany => userCompany.Company);

        HasMany(company => company.CompanyAddresses)
            .WithRequired(userCompany => userCompany.Company);

        HasMany(company => company.CompanyContacts)
           .WithRequired(userCompany => userCompany.Company);

        // Foreigners Keys
        HasRequired(x => x.EnterpriseGroup)
           .WithMany()
               .HasForeignKey(z => z.IdEnterpriseGroup);
    }
}

В моем случае моя проблема заключается в коде:

// Foreigners Keys
HasRequired(x => x.EnterpriseGroup)
   .WithMany()
       .HasForeignKey(z => z.IdEnterpriseGroup);

Отправляю про WS / Restful объект ниже.Свойство [IdEnterpriseGroup] является сопоставленным внешним ключом для таблицы ENTERPRISE_GROUP.Но когда объект был отправлен для Entity Framework, он не проверял внешний ключ сущности. Я отправил ложный ключ, не существует.

Мы хотели бы создать модульный тест для проверки сбоя случая дляобъект или ключ не найдены.У одного объекта может быть много свойств внешнего ключа, и нам нужно проверить все.

{
    "IdCompany": "ae776964-5547-49a3-bfc9-9d13a535c645",
    "SocialName": "Empresa 1",
    "FantasyName": "Empresa 1",
    "IdEnterpriseGroup": "8da84236-d352-4f3f-adee-b194a4b472cs",
    "EnterpriseGroup": null,
    "UserCompanies": null,
    "CompanyAddresses": null,
    "CompanyContacts": null
}

Когда .Net Framework получает исключение, выдается SqlException:

Невозможно вставитьзначение NULL в столбце «ID_ENTERPRISE_GROUP», таблица «BEECORE_1.1.dbo.ADM_COMPANY»;столбец не допускает пустых значений.ОБНОВЛЕНИЕ не удается.

Я пытался получить свойства [HasForeignKey], сопоставленные с [CompanyConfiguration], но безуспешно.

Кто-то может мне помочь с другим решением, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...