gpt4 book ai didi

c# - 在 Entity Framework 上创建外键关系的问题

转载 作者:IT王子 更新时间:2023-10-29 03:58:02 25 4
gpt4 key购买 nike

我在我的 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: : Multiplicity conflicts with the referential constraint in Role 'Dettaglio_TEST_TABLE_Target' in relationship 'Dettaglio_TEST_TABLE'. Because all of the properties in the Dependent Role are non-nullable, multiplicity of the Principal Role must be '1'.

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

最佳答案

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

public virtual int IDTEST { get; set; }

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

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

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

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

public virtual int? IDTEST { get; set; }

否则,您必须使用 HasRequired 来获得与不可为 null 的 FK 属性的必需关系。

关于c# - 在 Entity Framework 上创建外键关系的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com