NHibernate无法插入

时间:2013-05-29 14:08:09

标签: nhibernate

您好我创建一个名为baza.sdf的空本地数据库

我的域名

namespace mapowanie.Domain {
    public class User
    {
        public virtual Guid Id { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
    } }

我的映射hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="mapowanie"
                   namespace="mapowanie.Domain">

  <class name="User">
    <id name="Id" generator="guid" />
    <property name="FirstName" type="string" />
    <property name="LastName" type="string"/>
  </class>
</hibernate-mapping>

的hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property>
    <property name="connection.connection_string">Data Source=D:\aaawypociny\mapowanie\mapowanie\baza.sdf</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

UserRepo

class UserRepository
    {
        public void Add(User newUser)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(newUser);
                    transaction.Commit();

                }
            }
        }
    }

在我尝试添加

时的transaction.Commit
UserRepository repo = new UserRepository();
var ja = new User { FirstName = "Name", LastName = "Surname" };
repo.Add(ja);

VS给我

  

未处理的类型异常   NHibernate.dll

中发生'NHibernate.Exceptions.GenericADOException'      

其他信息:无法插入:   [mapowanie.Domain.User#8cafd9e5-0eda-4ccc-ba4a-f8935b68dfdc] [SQL:   INSERT INTO User(FirstName,LastName,Id)VALUES(?,?,?)]

我能做错什么?

3 个答案:

答案 0 :(得分:0)

你必须转义表名,我认为“User”是一个可疑的保留字。试着在hbm中定义:

<class name="User" table="`User`">
注意用户周围的``,这会通知NHibernate转义表名。要手动使用问题查询(即不通过NHibernate),请手动转义名称,例如:

create table [User] (
    Id UNIQUEIDENTIFIER not null,
....

答案 1 :(得分:0)

Felice Pollano对于保留字“User”是正确的,请重命名该表并重试。 我遇到同样的问题重命名解决了我的问题。

另外请验证您传递的表名是否正确,我没有重命名,我为此奋斗..

<class name="User1" table="User1" lazy="false">

答案 2 :(得分:0)

在某些未显示实际异常消息的情况下,您可以尝试:

  • 检查数据库中的所有字段是否可以为空,这样如果没有提供某些必需的值,您可以看到正在经历的内容,您可以随时更改它

  • 检查您的字段长度是否足以容纳正在发送的数据,否则您将以data will be truncated消息的形式获得could not insert消息