我正在使用流畅的框架来实现实体和数据库模型之间的映射。
例如,当我发送一个完整的对象进行更新,但是有了属性[Guid? IdEnterpriseGroup]具有错误值[数据库中不存在GUID],实体框架在数据库中执行之前不验证外键,并返回异常。
我将描述某些人帮助我的情景。
我的实体类公司如下:
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表的foreignkey。但是当对象被发送给实体框架时,他不会验证实体外键。我发送了一个假密钥,不存在。
我们想创建一个单元测试来验证对象或密钥未找到的情况失败。 一个实体可以有许多属性外键,我们需要验证所有。
{
"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插入列&#39; ID_ENTERPRISE_GROUP&#39;,表&#39; BEECORE_1.1.dbo.ADM_COMPANY&#39 ;;列不允许空值。更新失败。
我尝试获取[CompanyConfiguration]的属性[HasForeignKey],但没有成功。
有人可以帮我解决其他问题吗?