C# Nhibernate多对多桥接表保持为空
我有两个表,与桥接表有多对多关系 用户类映射:C# Nhibernate多对多桥接表保持为空,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我有两个表,与桥接表有多对多关系 用户类映射: <class name="MatrixCore.User" table="MatrixUser" lazy="false"> <id name="ID" column="ID" unsaved-value="0"> <generator class="native"/> </id> <property name="FirstName"/> <
<class name="MatrixCore.User" table="MatrixUser" lazy="false">
<id name="ID" column="ID" unsaved-value="0">
<generator class="native"/>
</id>
<property name="FirstName"/>
<property name="LastName"/>
<property name="UserName"/>
<property name="Password"/>
<many-to-one name="UserType" class="MatrixCore.UserType" />
<set name="Projects" table="UserInProject" cascade="All">
<key column="MatrixUser_ID"/>
<many-to-many class="Project" column="Project_ID"/>
</set>
</class>
项目类映射:
<class name="MatrixCore.Project" table="Project" lazy="false">
<id name="ID" column="ID" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Name" />
<property name="Acronym"/>
<property name="StartDate"/>
<property name="EndDate"/>
<set name="Users" table="UserInProject" cascade="All">
<key column="Project_ID"/>
<many-to-many class="User" column="MatrixUser_ID" />
</set>
</class>
类的实现太简单了,每个类都有一个集合
另一个。
我试图在桥接表保持为空的表中插入记录
ICollection<Project> ps = new HashSet<Project>() { project};
UserType tp = (UserType)session.Get("UserType", 1);
User u = new User()
{
FirstName = "Hussein",
LastName = "Hussein",
UserName = "Hussein",
Password = "welcome",
UserType = tp,
Projects = ps
};
session.Save(u);
ICollection ps=newhashset(){project};
UserType tp=(UserType)session.Get(“UserType”,1);
用户u=新用户()
{
FirstName=“侯赛因”,
LastName=“侯赛因”,
用户名=“侯赛因”,
Password=“欢迎”,
UserType=tp,
项目=ps
};
session.Save(u);
您需要将用户添加到每个项目中的Users
属性中
在保存之前添加以下循环-
foreach (Project project in u.Projects)
{
project.Users.Add(u);
}
试试这个映射
对于用户类
<set name="Projects" table="UserInProject" inverse="true" cascade="save-update" lazy="false">
<key column="MatrixUser_ID" />
<many-to-many class="Project" column="Project_ID"/>
</set>
和项目课
<set name="Users" table="UserInProject" cascade="save-update" lazy="false">
<key column="Project_ID" />
<many-to-many class="User" column="MatrixUser_ID"/>
</set>
你真的应该创建一个同时引用项目和用户的中间表(ProjectUsers),以防止多对多关系:)有一个表,请重新读取映射:)谢谢sleiman,它工作得很好。你能解释一下反向属性如何解决这个问题吗我有点吃惊。