多重性在关系“ CW_FirmaCommunication_CwFirma”中的角色“ CW_FirmaCommunication_CwFirma_Source”中无效

时间:2018-11-16 14:39:39

标签: c# entity-framework-6 one-to-many ef-fluent-api

我有以下问题:

我有一家公司(CW_Firma),可以通过0到许多方式与他们联系(CW_FirmaCommunication)。 我正在使用EntityFramework和FluentAPI创建关系。

我有以下代码:

[Table("dbo.CW_Firma")]
public class CW_Firma
{
    [Key]
    [Column("F_VAT")]
    public int VatNumber { get; set; }
}

[Table("dbo.CW_FirmaCommunication")]
public class CW_FirmaCommunication
{
    [Key]
    [Column("FC_VAT")]
    public int VatNumber { get; set; }
    [Column("FC_Data")]
    public string FC_Data { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<CW_FirmaCommunication>()
        .HasRequired(c => c.CwFirma)
        .WithMany()
        .HasForeignKey(f => f.VatNumber);
}

运行代码时,出现以下异常:

  

多重性在关系“ CW_FirmaCommunication_CwFirma”中的角色“ CW_FirmaCommunication_CwFirma_Source”中无效。由于从属角色是指关键属性,因此从属角色的多重性上限必须为'1'

我一直在搜索互联网,在StackOverflow上寻找不同的解决方案,但是似乎没有什么可以解决我的问题。

谁能告诉我我要去哪里错了?

2 个答案:

答案 0 :(得分:0)

  1. 您使用流利的api和映射注释-我希望只使用一个,
  2. 在注释映射中,您声明CW_FirmaCommunication表的字段VatNumber是主键(与CW_Firma中的VatNumber一样),这意味着在使用所需的流利api时,您具有1:1的关系。

基于您的代码,我做了一些更正:

[Table("dbo.CW_FirmaCommunication")]
public class CW_FirmaCommunication
{
    [Key]
    [Column("Communnication_Id")]
    public int CommunicationId { get; set; }

    [Column("FC_VAT")]
    public int VatNumber { get; set; }

    public CW_Firma Firma { get; set; }

    [Column("FC_Data")]        
    public string FC_Data { get; set; }
}

我为通讯表添加了单独的PK(不是FC_VAT),并添加了导航属性Firma。

新映射:

modelBuilder.Entity<CW_FirmaCommunication>()
            .HasRequired<CW_Firma>(c => c.Firma)
            .WithMany()
            .HasForeignKey(f => f.VatNumber);

它正在我的测试数据库中工作。

答案 1 :(得分:0)

经过大量的搜索和尝试,这是我最终得到的结果,并且运作良好:

var

然后我从“ OnModelCreating”中删除了代码。