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