gpt4 book ai didi

entity-framework - EF Code First 一对多和反向一对一关系

转载 作者:行者123 更新时间:2023-12-03 07:26:02 27 4
gpt4 key购买 nike

我尝试首先使用代码创建一对多和反向一对一关系。这就是我想做的事情

1)两个类之间的一对多并且它按预期工作。

    public class X
{
[Key]
public int XId { get; set; }
public ICollection<Y> Y { get; set; }

}

public class Y
{
[Key]
public int YId { get; set; }
public int XId { get; set; }
public X X { get; set; }
}

public class DataContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Y>()
.HasRequired(y => y.X)
.WithMany(x => x.Y)
.HasForeignKey(y => y.XId);
}
}

现在我想做的是在Y和X之间创建反向一对一可选关系,这样X将包含Y的外键......这怎么可能?这是我正在尝试做的事情,它会引发一些多重错误

       public class X
{
[Key]
public int XId { get; set; }
public ICollection<Y> Y { get; set; }
public int YId {get; set; }
[ForiegnKey("YId")]
public Y YOptional { get; set; }
}

public class Y
{
[Key]
public int YId { get; set; }
public int XId { get; set; }
public X X { get; set; }
public X XOptional {get; set; }
}

public class DataContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Y>()
.HasRequired(y => y.X)
.WithMany(x => x.Y)
.HasForeignKey(y => y.XId);

modelBuilder.Entity<X>()
.HasOptional(x => x.YOptional)
.WithOptionalDependent(y=> y.XOptional);
}
}

最佳答案

两个实体之间不能存在两端定义不同的关系。因此,您不能从一个方向执行 1:*,从另一个方向执行 1:1。

让我猜测一下,您并不真的希望从属端的比例为 1:1。从这一点来看,它永远只指向一件事。

在映射中,与生活中不同,除非有多对多,否则 child 只有一个 parent 。

但是,您可以创建 0..1 : * 关系(零或一对多)。父级可以有一个或多个子级(例如“许多”),但子级可以在没有父级的情况下存在,但它永远不能有超过一个父级(例如“零或一个”)。

这是使您的类产生[零或一]对多关系的最简单方法。请注意,我将 Y 类中的外键设置为可为 null 的 int。通过此设置,EF 约定将生成一个映射,让子项在没有父项的情况下存在。

public class X
{
[Key]
public int XId { get; set; }
public ICollection<Y> Y { get; set; }

}

public class Y
{
[Key]
public int YId { get; set; }
public int? XId { get; set; }
public X X { get; set; }
}

public class DataContext : DbContext
{
public DbSet<X> XSet { get; set; }
public DbSet<Y> YSet { get; set; }
}

这是从上述类和上下文派生的视觉模型的屏幕截图。如果我对您可能只是以不同方式感知它的猜测是正确的,我认为这会实现您正在寻求的行为。

enter image description here

关于entity-framework - EF Code First 一对多和反向一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27544369/

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