XML验证错误:未声明'fetch'属性

时间:2017-11-07 10:20:27

标签: c# nhibernate

我是NHibernate的新手,我发现问题映射两个表关系。 我在SQL Server数据库中有两个表cafe_tablecafe_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_tablemany-to-one cafe_table_group上的cafe_table_group_id关系cafe_table_groupone-to-manycafe_table的关系 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; } } } 。< / p>

我的模型CafeTable类: namespace CafePOS {

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; }
    }
}

我的CafeTableGroup模型类:

A <- c("a","b","c","d")
B <- c("i","","k","l")
C <- c("m","j","o","p")
D <- c("","o","","")

df <- data.frame(A,B,C,D, stringsAsFactors = FALSE)

df[2,2:3] <- df[2,3:4]

#remove column D
df <- df[,1:3]

> df
  A B C
1 a i m
2 b j o
3 c k o
4 d l p

我只希望SELECT语句的这种关系类似于SQL查询中的INNER JOIN。

1 个答案:

答案 0 :(得分:1)

在子表中,我们应该将引用映射为可编辑,并将其ID映射为只读

<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" insert="false" update="false">
      <column name="cafe_table_group_id" sql-type="decimal" not-null="false" />
    </property>
    <many-to-one name="cafe_table_group" 
         class="CafePOS.CafeTableGroup" 
         column="cafe_table_group_id" fetch="select"/>
  ...

父母应该有没有fetch模式的集合 - 而且,应该使用级联...

<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`">-->
    <set name="cafe_table" table="`cafe_table`" cascade="all-delete-orphan" >
      <key column="cafe_table_group_id"/>
      <!--<one-to-many class="CafePOS.CafeTable"  fetch="select"/>-->
      <one-to-many class="CafePOS.CafeTable" />
    </set>

现在分配双方

var parent = ...;
var child = ...;
parent.cafe_table.Add(child);
child.cafe_table_group = parent;
// this will be enough.. because cascade will do the rest in proper order
session.SaveOrUpdate(parent);

以下是更详细的说明如何处理: