我有一张Users
表和一张Profiles
表。一个用户可以拥有许多配置文件,配置文件可以拥有许多用户。另一个要求是,用户的配置文件应在保存到数据库时保留其指定的顺序。因此,我有以下关系:
如何使用NHibernate将其正确映射到类?是创建另一个类UserProfile
且具有Order
属性并引用User
和Profile
的类的唯一方法吗?这是一种更时尚的技术吗?我想避免这种情况,因为它会添加另一个抽象层,而这个抽象层并不是必需的。
感谢您的任何建议。
答案 0 :(得分:1)
我已经多次看过这个问题了,如果没有创建 UserProfile 实体,我认为我没有看到优秀的解决方案。
您可以做的一件事是仅在Users或Profiles类中引用此实体。例如,在向用户添加新配置文件时,您可以执行此类操作:
public virtual AddProfile(Profile profileToAdd, int order)
{
//Create middle man object
UserProfile newUserProfile = new UserProfile(this.Id, profileToAdd, order);
this.UserProfiles.Add(newUserProfile);
}
这在你的情况下可能并不完美,但是如果你想要抽象这个中间人以便你只在你的实体中处理它,我认为上面的例子给你一个开始。
答案 1 :(得分:1)
我实际上找到了正确的方法来解决这个问题。
FluentMappings映射应使用 AsMap(indexColumnName)
或<map name="Profiles"><index column="Order" type="integer" /></map>
。
// Inside the UserMapping (or an AutoMappingOverride).
this.ManyToMany(u => u.Profiles).AsMap("`Order`"); // "Order" is the column we want!
// Which produces this SQL - SQLite in my case:
create table ProfileToUser (
User_id INT not null,
Profile_id INT not null,
"Order" INT not null, // Exactly what I wanted.
primary key (User_id, Order))