关系 '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 上查看不同的解决方案,但似乎没有任何方法可以解决我的问题。
谁能告诉我哪里出错了?
- 你使用流畅的 api 和映射注释 - 我宁愿只使用一个,
- 在注释映射中,您声明 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" 中删除了代码。
我有以下问题:
我有一家公司 (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 上查看不同的解决方案,但似乎没有任何方法可以解决我的问题。
谁能告诉我哪里出错了?
- 你使用流畅的 api 和映射注释 - 我宁愿只使用一个,
- 在注释映射中,您声明 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" 中删除了代码。