【问题标题】:One to One Relationship on Primary Key with Entity Framework Code First主键上的一对一关系与实体框架代码优先
【发布时间】:2011-03-17 13:52:28
【问题描述】:

在尝试使用 Code First 创建一对一关系时,我目前遇到以下错误: System.Data.Edm.EdmAssociationEnd::多重性在关系“C001_Holding_Teste_C001_Holding”中的角色“C001_Holding_Teste_C001_Holding_Source”中无效。因为 Dependent Role 指的是关键属性,所以 Dependent Role 的多重性的上限必须为 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 来创建这些关系,有人知道为什么会这样吗?

Tks.

【问题讨论】:

    标签: entity-framework ef-code-first


    【解决方案1】:

    可以将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; }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多