主要密钥与实体框架代码的一对一关系

时间:2011-03-17 13:52:28

标签: entity-framework ef-code-first

尝试使用Code First创建一对一关系时,我当前遇到以下错误: System.Data.Edm.EdmAssociationEnd :: Multiplicity在关系'C001_Holding_Teste_C001_Holding'中的角色'C001_Holding_Teste_C001_Holding_Source'中无效。由于“从属角色”是指关键属性,因此从属角色的多重性的上限必须为1。 我的实体定义如下:

[Table("C001_Holding", Schema = "Cad")]
public partial class C001_Holding
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int C001_Id { get; set; }

    [MaxLength(16)]
    public string C001_Codigo { get; set; }

    [MaxLength(100)]
    public string C001_Descricao { get; set; }
}

public class C001_Holding_Test
{
    [Key]
    public int C001_Id { get; set; }
    [MaxLength(100)]
    public string C001_TestInfo { get; set; }

    [ForeignKey("C001_Id")]
    public virtual C001_Holding C001_Holding { get; set; }
}

我不想使用Fluent来创建这些关系,有谁知道为什么会这样?

韩国社交协会

1 个答案:

答案 0 :(得分:5)

可以将ForeignKey属性放在导航属性上,然后指定要作为外键使用的属性的名称(这就是您所做的)。或者,您可以将其放在外键属性上,然后指定表示关系的导航属性的名称。这看起来像是:

public class C001_Holding_Test
{
    [Key]
    [ForeignKey("C001_Holding")]
    public int C001_Id { get; set; }

    [MaxLength(100)]
    public string C001_TestInfo { get; set; }

    public virtual C001_Holding C001_Holding { get; set; }
}

出于某种原因,第二个选项在第一个选项发生错误时有效。 (这对我来说感觉就像一个错误,因为两个选项应该代表相同的关系。或者实际上存在语义差异,我看不到......)