gpt4 book ai didi

c# - 是否可以将表拆分为具有一对多关系的 EF 类?

转载 作者:行者123 更新时间:2023-11-30 23:21:00 24 4
gpt4 key购买 nike

数据库结构
我有一个非常非规范化的 SQL 表,其结构如下:

CREATE TABLE logistix.shipments
(
shipment_id INT NOT NULL PRIMARY KEY,
destination_id NVARCHAR(15) NOT NULL PRIMARY KEY,
pallet_id INT NOT NULL PRIMARY KEY,
destination_order INT NOT NULL,
pallet_description NVARCHAR(40) NOT NULL
)

虽然每个特定记录都是唯一的,但一次货件可以有多个托盘运往多个目的地。

.NET 接口(interface)
这将由 EF 对象操作,我想将其构造如下:

class ShippingContext : DbContext
{
public virtual DbSet<Shipment> Shipments {get; set;}
}

class Shipment
{
int ShipmentId {get; set;}
List<Destination> ShipmentStops {get; set;}
}

class Destination
{
string DestinationId {get; set;}
int DestinationOrder {get; set;}
List<Pallet> Pallets {get; set;}
}

class Pallet
{
int PalletId {get; set;}
string PalletDescription {get; set;}
}

问题
虽然我找到了关于将表拆分为一对一实体以及将外键数据映射到 EF 中的集合的教程,但我找不到任何关于将列从一个表映射到集合的教程。这可能吗,或者我是否仅限于拆分表、创建 View 或创建每个列都有一个属性的 POCO 类?

结局
另一个应用程序将访问 SQL 表以生成关于任意数量的 cargo 的报告,因此 Powers That Be 出于性能考虑选择使用非规范化表,而不是一套规范化表和 View ,后者需要更长的检索时间。

最佳答案

你的类应该看起来像这样链接

public class ShipmnetContext : DbContext
{
public DbSet<Shipment> Shipments { get; set; }
public DbSet<Destination> Destinations { get; set; }
public DbSet<Pallet> Pallets { get; set; }
}

public class Shipment
{
public int ShipmentId { get; set; }
public ICollection<Destination> ShipmentStops { get; set; }

public Shipment()
{
ShipmentStops = new HashSet<Destination>();
}
}

public class Destination
{
[Key]
public string DestinationId { get; set; }
public int DestinationOrder { get; set; }
//[Required]
public Shipment Shipment { get; set; } //Foreign key to Shipment table, make property NotNull by adding [Required] attribute
public ICollection<Pallet> Pallets { get; set; }

public Destination()
{
Pallets = new HashSet<Pallet>();
}
}

public class Pallet
{
public int PalletId { get; set; }
public string PalletDescription { get; set; }
public Destination Destination { get; set; } //Foreign key to Destination table
}

关于c# - 是否可以将表拆分为具有一对多关系的 EF 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39518282/

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