流畅的多对多关系不起作用
Fluent many-to-many relationship not working
我正在使用 Fluent automapper 为代码优先的 NHibernate 项目创建配置(MySql 配置),但在实现高效的多对多关系时遇到了问题。例如,假设我想要 table 个 Stores 和 table 个 Employees。一名员工可能在多家商店工作,当然每家商店都有多名员工在那里工作。所以我给 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; }
}
创建此数据库会导致商店和员工 table 被自动创建,但没有 table 在两者之间映射。我可以创建这两种实体类型,将员工添加到商店的员工列表并保存它而不会遇到错误,但尝试重新加载它会导致列表为空。但是,如果我像这样将商店列表添加到员工记录中...
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>();
}
}
... 并使用员工实体填充商店列表,然后数据库中出现 storestoemployees table,一切正常。
在我看来,要求我的应用程序中的所有多对多关系在两个实体中都需要列表是低效的,因为它们只需要出现在一个实体中,无论是在实体声明本身还是在所有实体中现在必须添加两次的代码。我在这里做错了什么,或者有什么方法可以让我覆盖 Fluent 正在做的任何默认映射吗?
对于一个集合,FNH 无法决定是使用 one-to-many 还是 many-to-many,将默认为 one-to-many。您可以使用覆盖有选择地覆盖它。
AutoMap.Assembly...
.Override<Store>(m => m.HasManyToMany(s => s.Employees).Table("store_to_employee"));
我正在使用 Fluent automapper 为代码优先的 NHibernate 项目创建配置(MySql 配置),但在实现高效的多对多关系时遇到了问题。例如,假设我想要 table 个 Stores 和 table 个 Employees。一名员工可能在多家商店工作,当然每家商店都有多名员工在那里工作。所以我给 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; }
}
创建此数据库会导致商店和员工 table 被自动创建,但没有 table 在两者之间映射。我可以创建这两种实体类型,将员工添加到商店的员工列表并保存它而不会遇到错误,但尝试重新加载它会导致列表为空。但是,如果我像这样将商店列表添加到员工记录中...
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>();
}
}
... 并使用员工实体填充商店列表,然后数据库中出现 storestoemployees table,一切正常。
在我看来,要求我的应用程序中的所有多对多关系在两个实体中都需要列表是低效的,因为它们只需要出现在一个实体中,无论是在实体声明本身还是在所有实体中现在必须添加两次的代码。我在这里做错了什么,或者有什么方法可以让我覆盖 Fluent 正在做的任何默认映射吗?
对于一个集合,FNH 无法决定是使用 one-to-many 还是 many-to-many,将默认为 one-to-many。您可以使用覆盖有选择地覆盖它。
AutoMap.Assembly...
.Override<Store>(m => m.HasManyToMany(s => s.Employees).Table("store_to_employee"));