关系 'CW_FirmaCommunication_CwFirma' 中的角色 'CW_FirmaCommunication_CwFirma_Source' 中的多重性无效

Multiplicity is not valid in Role 'CW_FirmaCommunication_CwFirma_Source' in relationship 'CW_FirmaCommunication_CwFirma'

我有以下问题:

我有一家公司 (CW_Firma),可以通过 0 到多种方式与他们联系(CW_Firma通信)。 我正在使用 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);
}

当我 运行 我的代码时,我得到以下异常:

Multiplicity is not valid in Role 'CW_FirmaCommunication_CwFirma_Source' in relationship 'CW_FirmaCommunication_CwFirma'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be '1'

我一直在网上搜索,在 Whosebug 上查看不同的解决方案,但似乎没有任何方法可以解决我的问题。

谁能告诉我哪里出错了?

  1. 你使用流畅的 api 和映射注释 - 我宁愿只使用一个,
  2. 在注释映射中,您声明 CW_FirmaCommunication table 的字段 VatNumber 是主键(如 CW_Firma 中的 VatNumber),这意味着您有关系 1:1 而使用流利的 api 你想要 1:many.

根据您的代码,我做了一些更正:

[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 table(不是 FC_VAT),并添加了导航 属性 Firma。

新映射:

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

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

经过大量搜索和尝试,这就是我最终得到的并且效果很好的方法:

public class CW_FirmaCommunication
{
    [Key]
    public int FC_ID { get; set; }
    public int FC_VAT { get; set; }
    public int FC_Type { get; set; }
    public string FC_Data { get; set; }

    [ForeignKey("FC_VAT")]
    public virtual CW_Firma CwFirma { get; set; }
}

public class CW_Firma
{
    [Key]
    public int F_VAT { get; set; }
}

并且我从 "OnModelCreating" 中删除了代码。