gpt4 book ai didi

.net - EF6 与旧版 SQL 数据库中的 2 个表的一对多关系

转载 作者:行者123 更新时间:2023-12-02 02:47:04 24 4
gpt4 key购买 nike

我正在尝试配置一对多关系,其中第二个表引用了第一个表。这些表位于现有的旧 Sql Server 数据库中。

我有一个 Customer 表和一个 CustomerBranches 表,如下所示:

enter image description here

我有一个 POCO,它允许客户对象导航到它的 BranchCustomer(子)(如果有的话),如果它本身是子对象,也可以导航到它的 ParentCustomer(父)。

public class Customer
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Customer> BranchCustomers { get; set; }
public virtual Customer ParentCustomer { get; set; }
}

我无法让它与数据注释或 Fluent API 一起使用。

我可以在 EF 中获得与“排序”工作的关系的唯一方法是使用 Fluent API 使用多对多关系:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>()
.HasMany<Customer>(s => s.BranchCustomers)
.WithRequired(c => c.ParentCustomers)
.Map(cs =>
{
cs.MapLeftKey("ParentCustId");
cs.MapRightKey("ChildCustId");
cs.ToTable("CustomerBranches");
});

}

和 POCO:
public class Customer
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Customer> BranchCustomers { get; set; }
public virtual List<Customer> ParentCustomers { get; set; }
}

在这种情况下,当 Customer 是 child 时,ParentCustomers 集合将只有一个客户。我知道,这是一个杂牌。在这种情况下,合适的方法是什么?

谢谢你。

最佳答案

ORM 不是对象数据库。 ORM 就是这样 - 只是一个映射工具。将表映射到类,将 FK 映射到引用。

但是您可以将自己的“工具”属性添加到实体。为什么不:

 public class Customer
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Customer> BranchCustomers { get; set; }
public virtual List<Customer> ParentCustomers { get; set; }
public Customer ParentCustomer {
get{
return BranchCustomers.FirstOrDefault();
}
}
public void SetParent(var p) {
return BranchCustomers.Add(p);
}
}

当然,这会增加抽象泄漏的数量。

关于.net - EF6 与旧版 SQL 数据库中的 2 个表的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54189753/

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