2

嗨,我创建名为 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>

休眠.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>

用户回购

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 (?, ?, ?)]

我能做错什么?

4

3 回答 3

1

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

<class name="User" table="`User`">

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

create table [User] (
    Id UNIQUEIDENTIFIER not null,
....
于 2013-05-29T18:41:34.047 回答
0

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

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

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

于 2014-07-12T11:15:12.750 回答
0

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

  • 检查数据库中的所有字段是否可以为空,以便如果未提供某些必需的值,您可以看到正在发生的事情,您可以随时将其更改回来

  • 检查您的字段长度是否足够大以容纳正在发送的数据,否则您将收到一条data will be truncated伪装成消息的could not insert消息

于 2015-11-05T02:25:33.447 回答