gpt4 book ai didi

c# - EF code first many to many with payload, compound key or surrogate key

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:04 25 4
gpt4 key购买 nike

我想完成以下模型:enter image description here

我的代码如下所示(删除了与问题无关的属性):

public class Stock
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

public virtual ICollection<StockProperty> StockProperties { get; set; }
}

public class StockProperty
{
[Key, Column(Order = 0)]
public int StockId { get; set; }
[Key, Column(Order = 1)]
public int PropertyId { get; set; }

public IList<StockPropertyValue> Values { get; set; }

public virtual Property Property { get; set; }
public virtual Stock Stock { get; set; }

}

public class StockPropertyValue
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

}

public class Property
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

public virtual ICollection<StockProperty> StockProperties { get; set; }
}

通过这段代码,我在 StockPropertyValues 表中获得了两个外键,Stock_Id 和 Property_Id。我可以改为向 StockProperty 添加一个显式主键,这会在 StockPropertyValues 表中为我提供外键 StockPropertyId。 StockProperties 确实有一些自己的附加数据。这些不同配置的优缺点是什么?

最佳答案

您在此处展示的方法的优势在于,您将对开箱即用的 StockId 和 PropertyId 的任意组合具有唯一约束。对 StockProperties 使用单个主键,您必须自己配置唯一约束。不利的一面是,如果您需要显式访问 StockPropertyValues 中的外键,则需要注释或流畅的 API。此外,我发现一些将为您的表创建自动 UI 的工具(例如 LightSwitch,但现在可能已经改变)无法处理复合外键。

关于c# - EF code first many to many with payload, compound key or surrogate key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33066280/

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