gpt4 book ai didi

c# - 无法使用 nhibernate 插入到表中

转载 作者:行者123 更新时间:2023-11-30 12:11:09 25 4
gpt4 key购买 nike

我正在学习 nhibernate 并尝试创建第一个示例。

我创建了一个空的基于服务的数据库并编写了映射和一些代码:

namespace lab
{
public class Skill
{
public virtual int Id { get; protected set; }
public virtual string Description { get; set; }
}
}
<?xml version='1.0' encoding='utf-8'?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="lab" assembly="lab">

<class name="Skill" table="Skill">
<id name="Id">
<generator class="native"/>
</id>
<property name="Description" />
</class>

</hibernate-mapping>
<?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="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="connection.connection_string">Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Dmitriy\Desktop\lab\lab\lab\DataBase.mdf;Integrated Security=True;User Instance=True</property>

<mapping file="C:\Users\Dmitriy\Desktop\lab\lab\lab\Skill.hbm.xml" />
</session-factory>

</hibernate-configuration>
var configuration = new Configuration();            
configuration.Configure(@"C:\Users\Dmitriy\Desktop\lab\lab\lab\hibernate.cfg.xml");
var session = configuration.BuildSessionFactory().OpenSession();
var transaction = session.BeginTransaction();
var skill = new Skill {Description = "C#"};
session.Save(skill);
transaction.Commit();

当我运行它时,我总是得到无法插入的错误:

INSERT INTO Skill (Description) VALUES (?); 
select SCOPE_IDENTITY()

Invalid object name \"Skill\".

我没有创建表,因为 nhibernate 应该自己创建它们。

你能帮我弄清楚为什么它不起作用吗?

最佳答案

要让 NHibernate 创建数据库模式,请在构建 SessionFactory 之前添加以下行:

new NHibernate.Tool.hbm2ddl.SchemaExport(configuration)
.Execute(false, true, false);

这个方法的签名是

public void Execute(bool script, bool export, bool justDrop);
  • script - 如果为真,则生成的架构脚本将写入控制台。
  • export - 如果为真,则生成的模式脚本将针对配置的数据库运行。
  • justDrop - 如果为真,则始终删除表。

有关导出模式功能的更多信息可以在 NH docs 中找到.

关于c# - 无法使用 nhibernate 插入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com