如果不存在外键

时间:2018-05-21 20:34:22

标签: c# .net entity-framework fluent

我正在使用流畅的框架来实现实体和数据库模型之间的映射。

例如,当我发送一个完整的对象进行更新,但是有了属性[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],但没有成功。

有人可以帮我解决其他问题吗?

0 个答案:

没有答案