Я использую для облегчения каркас для отображения между сущностями и моделью базы данных.
Например, когда я отправляю полный объект для обновления, но со свойством [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], но безуспешно.
Кто-то может мне помочь с другим решением, пожалуйста?