Fluent nhibernate NHibernate:覆盖一对多关系上的自动映射

Fluent nhibernate NHibernate:覆盖一对多关系上的自动映射,fluent-nhibernate,automapping,Fluent Nhibernate,Automapping,我刚刚开始使用Fluent NHibernate,希望得到一些帮助/指点,说明我是如何映射这一点的。以下是我正在使用的域模型: 类用户:您的标准用户类 类首选项:一组键值对。用户可以有许多首选项 类文章:为了简洁起见,省略了完整的描述,但用户创建了一篇文章,它可以包含一个或多个首选项 因此,总结一下: class User { IList<Preference> Preferences; IList<Post> Posts; } class Post

我刚刚开始使用Fluent NHibernate,希望得到一些帮助/指点,说明我是如何映射这一点的。以下是我正在使用的域模型:

类用户:您的标准用户类

类首选项:一组键值对。用户可以有许多首选项

类文章:为了简洁起见,省略了完整的描述,但用户创建了一篇文章,它可以包含一个或多个首选项

因此,总结一下:

class User 
{
    IList<Preference> Preferences;
    IList<Post> Posts;
} 

class Post
{
    IList<Preference> PostData;
}
首选项表在我看来很难看,我更希望有如下内容:

User
------------------------
User_Id

Preference
------------------------
Preference_Id | User_Id

Post
------------------------
Post_Id | User_Id | Preference_Id
任何关于如何做到这一点的帮助都是非常感谢的!我已经有一个类实现了IAutoMappingOverride接口,但我不确定如何进行实际的映射

谢谢,

Teja

我会参考此配置,以便正确配置手动和自动映射:

我还注意到您的首选项表和post表中都有一些组合键,我将研究如何映射组合键。这里有一个链接可以帮助您映射复合键(包含多个列的主键):

就您的fluent映射而言,以下内容可能会让您指向正确的方向,您可以使用
HasMany
References来映射
一对多
关系,具体取决于您希望外键位于哪个表上:

public class UserMap : ClassMap<User>
{
    public UserMap(){
        Id(x => x.Id).Column("User_Id").GeneratedBy.Identity();
        HasMany(x => x.Preferences);
    }
}
public class PostMap: ClassMap<Post>
{
    public UserMap(){
        Id(x => x.Id).Column("Post_Id").GeneratedBy.Identity();
        References(x => x.Preferences); 
    }
}
公共类用户映射:类映射
{
公共用户映射(){
Id(x=>x.Id).Column(“User_Id”).GeneratedBy.Identity();
HasMany(x=>x.Preferences);
}
}
公共类邮戳:类映射
{
公共用户映射(){
Id(x=>x.Id).Column(“Post_Id”).GeneratedBy.Identity();
参考(x=>x.Preferences);
}
}

由于首选项相同,因此一个简单的属性就足够了

class Post
{
    public virtual User User { get; set; }
    public virtual IList<Preference> Preferences { get { return User.Preferences; } }
}
class Post
{
公共虚拟用户用户{get;set;}
公共虚拟IList首选项{get{return User.Preferences;}}
}

Post表中的Preference\u Id的作用是什么?你说帖子有很多偏好。
Post.Preferences
是否包含与
User.Preferences
相同的元素?是。。Post.Preferences始终包含User.Preferences中的数据。
class Post
{
    public virtual User User { get; set; }
    public virtual IList<Preference> Preferences { get { return User.Preferences; } }
}