【发布时间】:2017-11-07 10:20:27
【问题描述】:
我是 NHibernate 的新手,我发现映射两个表关系的问题。
我在 SQL Server 数据库中有两个表 cafe_table 和 cafe_table_group。它们都有各自唯一 ID 的自动增量和标识列。
虽然foreign key在表中显示,但我不会有。
这是我的 cafe_table.hbm.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="CafePOS" namespace="CafePOS" xmlns="urn:nhibernate-mapping-2.2">
<class name="CafePOS.CafeTable" table="cafe_table" lazy="true" >
<id name="cafe_table_id" column="cafe_table_id">
<generator class="identity" />
</id>
<property name="cafe_table_group_id">
<column name="cafe_table_group_id" sql-type="decimal" not-null="false" />
<many-to-one name="cafe_table_group" class="CafePOS.CafeTableGroup" column="cafe_table_group_id" fetch="select"/>
</class>
</hibernate-mapping>
我的 cafe_table.hbm.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="CafePOS" namespace="CafePOS" xmlns="urn:nhibernate-mapping-2.2">
<class name="CafePOS.CafeTableGroup" table="cafe_table_group" lazy="true" >
<id name="cafe_table_group_id" column="cafe_table_group_id">
<generator class="identity" />
</id>
<set name="cafe_table" table="`cafe_table`">
<key column="cafe_table_group_id"/>
<one-to-many class="CafePOS.CafeTable" fetch="select"/>
</set>
</class>
</hibernate-mapping>
cafe_table 将与cafe_table_group_id 上的cafe_table_group 具有many-to-one 关系,cafe_table_group 将与cafe_table 具有one-to-many 关系。
我的模型 CafeTable 类: 命名空间 CafePOS {
public class CafeTable {
public virtual decimal cafe_table_id { get; set; }
public virtual decimal cafe_table_group_id { get; set; }
public virtual CafeTableGroup cafe_table_group { get; set; }
}
}
我的 CafeTableGroup 模型类:
namespace CafePOS {
public class CafeTableGroup {
public virtual decimal cafe_table_group_id { get; set; }
public virtual string cafe_table_group_name { get; set; }
public virtual IList<CafeTable> cafe_table { get; set; }
}
}
我只希望 SELECT 语句的这种关系类似于 SQL 查询中的 INNER JOIN。
【问题讨论】:
-
OT:如果不是必需的,则避免使用 hbm 文件。它们容易出错且难以阅读。您可以使用内置的 FluentMapping 或 FluentNHibernate 来映射您的实体。在 C# 中,以 UpperCamelCase 命名您的属性并且不带下划线是很常见的。
标签: c# nhibernate