【问题标题】:Problems creating a Foreign-Key relationship on Entity Framework在实体框架上创建外键关系的问题
【发布时间】:2013-06-29 11:52:14
【问题描述】:

我在我的 Entity Framework fluent Api 中配置外键关系时遇到问题:

这是报告的主要内容:

 public class Testata
{
    public Testata() { Details = new List<Dettaglio>(); }
    public virtual int IDTEST { get; set; }
    public virtual string Value { get; set; }
    public virtual int IDDETAIL { get; set; }
    public virtual string IDTESTALT { get; set; }
    public virtual byte[] BLOB { get; set; }

    public virtual IList<Dettaglio> Details { get; set; }
}

这是报告的详细信息

public class Dettaglio
{
    public virtual int IDDETAIL { get; set; }
    public virtual int IDTEST { get; set; }
    public virtual string DSDETAIL { get; set; }

    public virtual Testata TEST_TABLE { get; set; }
}

这是我对两者的流畅 API 定义。报告负责人:

public TEST_TABLEMap()
    {
        // Primary Key
        this.HasKey(t => t.IDTEST)
            .Property(t => t.IDTEST)
            .IsRequired()
            .HasColumnType("Int")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .HasColumnName("IDTEST");


        // Table & Column Mappings
        this.ToTable("TEST_TABLE");
        this.Property(t => t.Value).HasColumnName("DSVALUETEST");
        this.Property(t => t.IDTESTALT).HasColumnName("IDTESTALT");
        this.Property(t => t.BLOB).HasColumnName("BLOB");
    }

报告详情:

public TEST_DETAILMap()
    {
        // Primary Key
        this.HasKey(t => t.DSDETAIL);

        // Properties
        this.Property(t => t.DSDETAIL);

        // Table & Column Mappings
        this.ToTable("TEST_DETAIL");
        this.Property(t => t.IDDETAIL).HasColumnName("IDDETAIL");
        // this.Property(t => t.IDTEST).HasColumnName("IDTEST");
        this.Property(t => t.DSDETAIL).HasColumnName("DSDETAIL");

        // Relationships
        this.HasOptional(t => t.TEST_TABLE)
            .WithMany(t => t.Details)
            .HasForeignKey(d => d.IDDETAIL).WillCascadeOnDelete(true);

    }

在执行时我总是得到这个错误

System.Data.Entity.Edm.EdmAssociationType: : 多重性与关系“Dettaglio_TEST_TABLE”中角色“Dettaglio_TEST_TABLE_Target”中的引用约束冲突。由于 Dependent Role 中的所有属性都不可为空,因此 Principal Role 的复数必须为“1”。

我想,这意味着我在外键定义方面失败了,但我真的不知道在哪里看。 非常感谢任何帮助/提示。

【问题讨论】:

    标签: c# .net entity-framework ef-code-first foreign-keys


    【解决方案1】:

    Dettaglio 类中的外键属性之间存在冲突...

    public virtual int IDTEST { get; set; }
    

    ...它具有不可为空的类型 (int),因此不能是可选的,您的映射...

    this.HasOptional(t => t.TEST_TABLE) //...
    

    ...您希望关系是可选的。

    如果您确实需要可选关系,请使用可为空的 FK 属性:

    public virtual int? IDTEST { get; set; }
    

    否则,您必须使用 HasRequired 与不可为空的 FK 属性建立必需的关系。

    【讨论】:

    • “?”对我来说是关键的补充。
    • 我正在使用 CodeFirst,在我的情况下,我只需要从属性中删除 [Required]
    猜你喜欢
    • 2017-07-20
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多