NHibernate映射

NHibernate映射,nhibernate,orm,nhibernate-mapping,Nhibernate,Orm,Nhibernate Mapping,有人能帮我吗?我的项目中有两个类:User和Article。看起来是这样的: 公共类用户 { 公共虚拟int用户标识{set;get;} 公共虚拟字符串名称{set;get;} 公共虚拟IList项目{set;get;} 公共用户(){} } 公共类文章 { 公共虚拟int ArticleID{set;get;} 公共虚拟字符串标题{set;get;} 公共虚拟字符串体{set;get;} 公共虚拟用户用户{set;get;} 公共物品(){} } 现在,我希望数据库中的表如下所示:

有人能帮我吗?我的项目中有两个类:User和Article。看起来是这样的:

公共类用户
{
公共虚拟int用户标识{set;get;}
公共虚拟字符串名称{set;get;}
公共虚拟IList项目{set;get;}
公共用户(){}
}   
公共类文章
{
公共虚拟int ArticleID{set;get;}
公共虚拟字符串标题{set;get;}
公共虚拟字符串体{set;get;}
公共虚拟用户用户{set;get;}
公共物品(){}
}
现在,我希望数据库中的表如下所示:


我已经使用了XML映射。请帮助我。

您的数据库模式显示多对多关系,而实体是多对一的。
所以你应该决定你需要什么样的关系。有关映射的其他信息您可以找到

您的DB模式显示多对多关系,而实体是多对一的。
所以你应该决定你需要什么样的关系。您可以找到的有关映射的其他信息

给定的ER图说明任何给定的文章可能有多个作者(用户)。在您的情况下,仍然不需要该模式


考虑到删除问题,如果您计划从数据库中删除任何用户行,您将得到多个具有某些用户ID的文章,这些用户ID的引用悬空,从而产生无用的用户信息。如果您只需要文章信息,只需与用户和文章建立1对n的关系。否则(如果您打算对其用户使用文章信息,甚至用户被删除),我建议保留删除标志,而不是删除条目。

给定的ER图表说明任何给定的文章可能有多个作者(用户)。在您的情况下,仍然不需要该模式


考虑到删除问题,如果您计划从数据库中删除任何用户行,您将得到多个具有某些用户ID的文章,这些用户ID的引用悬空,从而产生无用的用户信息。如果您只需要文章信息,只需与用户和文章建立1对n的关系。否则(如果您打算对其用户使用文章信息,甚至用户被删除),我建议保留删除标志,而不是删除条目。

正如
Sly
正确指出的那样,您可以将
UserId
移动到
article
表中

如果用户被删除,则将
用户ID
设置为特殊用户,例如
系统用户

系统用户
可以拥有不再分配任何用户的任何文章,从而保持完整性

正如
Sly
正确指出的那样,您可以将
UserId
移动到
Article
表中

如果用户被删除,则将
用户ID
设置为特殊用户,例如
系统用户

系统用户
可以拥有不再分配任何用户的任何文章,从而保持完整性

我希望DB关系和那个ERD图完全一样,我希望表关系和那个ERD图完全一样,因为一篇文章的所有者只能是一个用户。删除用户后,他的文章仍然存在于数据库中。您只需将UserID移动到文章表中,并在删除用户时将其设置为null,不是吗?我希望数据库关系与ERD图中的关系完全相同。我希望表关系与ERD图中的关系完全相同,因为一篇文章的所有者只能是一个用户。删除用户后,他的文章仍然存在于数据库中。您只需将UserID移动到article表中,并在删除用户时将其设置为null,就可以实现这一点,不是吗?
    public class User
    {
        public virtual int UserID { set; get; }
        public virtual string Name { set; get; }
        public virtual IList<Article> Articles { set; get; }
        public User() { }
    }   

    public class Article
    {
        public virtual int ArticleID { set; get; }
        public virtual string Title { set; get; }
        public virtual string Body { set; get; }
        public virtual User User { set; get; }
        public Article() { }
    }