0

我刚刚开始使用 Fluent NHibernate,希望得到一些关于我如何映射它的帮助/指针。这是我正在使用的域模型:

Class User:您的标准用户类

类首选项:一组键值对。一个用户可以有很多偏好。

类 Post:为简洁起见,省略了完整的描述,但用户创建了一个帖子,它可以包含一个或多个偏好。

所以,回顾一下:

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

class Post
{
    IList<Preference> PostData;
}

Hibernate automapper 提供了以下数据库结构:

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

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

Post
------------------------
Post_Id | User_Id

偏好表对我来说看起来很丑,更愿意有类似的东西:

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

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

Post
------------------------
Post_Id | User_Id | Preference_Id

非常感谢任何有关如何执行此操作的帮助!我已经有一个实现 IAutoMappingOverride 接口的类,但我不确定如何进行实际映射。

谢谢,
泰加

4

2 回答 2

1

我会参考此配置来正确配置手动和自动映射:
Mixing Mixing Automapping and manual mapping

我还注意到您的偏好表和发布表中都有一些复合键,我会研究如何映射复合键。这是一个链接,可以帮助您映射复合键(具有多列的主键):
Using Fluent NHibernate to map Composite Keys

就您的流利地图而言,以下可能会让您指出正确的方向,您可以one-to-many使用两者HasManyReferences根据您希望外键在哪个表上来映射关系:

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); 
    }
}
于 2013-04-16T14:17:02.730 回答
0

因为偏好是相同的,一个简单的属性就足够了

class Post
{
    public virtual User User { get; set; }
    public virtual IList<Preference> Preferences { get { return User.Preferences; } }
}
于 2013-04-17T05:21:54.527 回答