我们可以使用.hbm.xml映射文件中的NHibernate来避免主键ID列的自动增量

时间:2017-08-09 11:19:30

标签: c# sql-server nhibernate

以下是我的mssql数据库脚本 我在这个部门创建表部门是主键但不自动递增,数据类型是varchar。

create table Department(
    deptid varchar(30) NOT NULL CONSTRAINT deptid_P_KEY PRIMARY KEY,
    departmentname varchar(100)
    )

以下是我的映射文件。

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="TestDal" namespace="NHSample.TestDal.Dal" xmlns="urn:nhibernate-mapping-2.2">
  <class name="DepartmentEntity" table="Department" lazy="true" >
    <id name="DeptId" >
      <generator class="assigned" />
      <column name="deptid" sql-type="varchar" not-null="true" />
    </id>
    <property name="Departmentname">
      <column name="departmentname" sql-type="varchar" not-null="false" />
    </property>
  </class>
  </hibernate-mapping>

当我运行并且在配置连接字符串路径时,它会给出错误 -

XML validation error: The 'type' attribute is not declared.

以下是我的配置代码:

   static Configuration nhConfiguration;
static ISessionFactory nhSessionFactory;
internal static void CreateSessionFactory(string configFilePath)
{  
    nhConfiguration = new Configuration();
    try
    {
        if (string.IsNullOrEmpty(configFilePath))
            nhConfiguration.Configure();
        else
            nhConfiguration.Configure(configFilePath);

        nhConfiguration.SessionFactory().DefaultFlushMode(flushMode);
    }
    catch (Exception exception)
    {
        throw new NHException("Failed to configure session factory.", exception);
    }
    try
    {
        nhSessionFactory = nhConfiguration.BuildSessionFactory();
    }   
}

在上面的代码行后面给出错误: nhConfiguration.Configure(configFilePath);

所以如何使用nhibernate来做到这一点。

1 个答案:

答案 0 :(得分:1)

我认为您可能需要将id映射更改为:

<id name="DeptId" generator="assigned" column="deptid" type="string"/>

type属性是可选的,如果底层属性是同一类型,则可以省略。