您好我创建一个名为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.CommitUserRepository 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(?,?,?)]
我能做错什么?
答案 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
消息