我想在2个类之间建立一对多关系。这些类都有一个复合ID,除了一列外,其他都相同。但是我得到一个错误,因为我的ID名相同。
This topic实际上很好地描述了我的问题,但是答案对我没有用,因为我无法更改数据库中列的名称。
这是课程:
public class Parent
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public List<Child> Children { get; set; }
public string Data { get; set; }
}
public class Child
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public string D { get; set; }
public Parent Parent { get; set; }
public string Data { get; set; }
}
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
CompositeId()
.KeyProperty(x => x.A)
.KeyProperty(x => x.B)
.KeyProperty(x => x.C);
Map(x => x.Data);
HasMany(x => x.Children)
.KeyColumns.Add("A", "B", "C");
}
}
public class ChildMap : ClassMap<Child>
{
public ChildMap()
{
CompositeId()
.KeyProperty(x => x.A)
.KeyProperty(x => x.B)
.KeyProperty(x => x.C)
.KeyProperty(x => x.D);
Map(x => x.Data);
References<Parent>(x => x.Parent)
.Columns("A", "B", "C");
// Also tried adding this
// .Not.Insert()
// .Not.Update()
// Another thing I tried was
// .ReadOnly()
}
}
当我尝试运行此代码时,会弹出以下异常: 创建SessionFactory时使用了无效或不完整的配置。检查PotentialReasons集合和InnerException以获取更多详细信息。
有这个内部异常: 无法为父类构建插入语句:添加类ID时失败
此内部异常具有另一个内部异常: 此SQL构建器中已经添加了列“ A” 参数名:columnName
如何在不更改数据库列名称的情况下进行管理?
(编辑) 我也尝试了使用普通的nhibernate xml映射,但是结果却有相同的例外:
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Assembly" namespace="Name.Space">
<class name="Parent" table="Parent">
<composite-id>
<key-property name="A" column="A" />
<key-property name="B" column="B" />
<key-property name="C" column="C" />
</composite-id>
<property name="Data" />
<set name="Children">
<key>
<column name="A" />
<column name="B" />
<column name="C" />
</key>
<one-to-many class="Child" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Assembly" namespace="Name.Space">
<class name="Child" table="Child">
<composite-id>
<key-property name="A" column="A" />
<key-property name="B" column="B" />
<key-property name="C" column="C" />
<key-property name="D" column="D" />
</composite-id>
<many-to-one name="Parent" cascade="none" insert="false" update="false" not-null="true">
<column name="A" />
<column name="B" />
<column name="C" />
</many-to-one>
<property name="Data" />
</class>
</hibernate-mapping>