gpt4 book ai didi

mysql - 流畅的多对多关系不起作用

转载 作者:行者123 更新时间:2023-11-29 11:47:00 25 4
gpt4 key购买 nike

我正在使用 Fluent 自动映射器为代码优先的 NHibernate 项目(MySql 配置)创建配置,但在实现高效的多对多关系时遇到问题。举个例子,假设我想要一个商店表和一个员工表。一名员工可能在多个商店工作,当然每个商店都有多名员工在那里工作。因此,我为 Store 实体提供了一个员工列表,如下所示:

public class Store
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Employee> Employees { get; set; }

public Store()
{
this.Employees = new List<Employee>();
}
}

public class Employee
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}

创建此数据库会自动创建商店表和员工表,但不会在两者之间映射任何表。我可以创建这两种实体类型,将员工添加到商店的员工列表中并保存它,而不会遇到错误,但尝试重新加载它会导致列表为空。但是,如果我像这样将商店列表添加到员工记录中......

public class Employee
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Store> Stores { get; set; } // <----

public Employee()
{
this.Stores = new List<Store>();
}
}

...并使用 Employee 实体填充 Stores 列表,然后 storetoemployees 表出现在数据库中,一切正常。

在我看来,要求应用程序中的所有多对多关系都要求两个实体中的列表是低效的,因为它们只需要出现在一个实体中,无论是在实体声明本身还是在所有代码中现在必须添加两次。我在这里做错了什么,或者有没有办法让我覆盖 Fluent 所做的任何默认映射?

最佳答案

对于一个集合,FNH 无法决定是使用一对多还是多对多,并且将默认为一对多。您可以有选择地使用覆盖来覆盖它。

AutoMap.Assembly...
.Override<Store>(m => m.HasManyToMany(s => s.Employees).Table("store_to_employee"));

关于mysql - 流畅的多对多关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756464/

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