NHibernate - 为类添加新属性

时间:2015-03-04 14:08:29

标签: nhibernate

当我向一个类添加新属性时,我对NHibernate幕后发生的事情感到有些困惑。

当我向'Item'类添加属性'Price'时,我的应用程序在检索Item对象时会抛出异常,因为这个新属性不在数据库中:

[SqlException (0x80131904): Invalid column name 'Price'.]

每次我在类中声明一个新属性时,我是否应该手动将列添加到我的数据库表中?

2 个答案:

答案 0 :(得分:1)

简短的回答是:是的,你是。

您要求nHibernate映射到数据库中的表的类只能具有作为该表中的列存在的属性。如果您想在该类中使用新属性,则需要在表中添加一列。

另一方面,如果你想要一个没有持久存储在数据库中的Item的“Price”属性,那么你应该在应用程序中有一个不同的类,而不是在nHibernate的控制下,它包含一个类的对象“项目”,具有自己的“价格”属性。

答案 1 :(得分:1)

通常,我们可以使用配置设置在创建ISessionFactory时更新我们的数据库模式:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
       <property name="hbm2ddl.auto">Update</property>

检查Table 3.2. NHibernate Configuration Properties

我们甚至可以在我们自己的代码中完成它:

How to update database table schemas with NHibernate schema generation?

(以上Q&amp; A的摘录)

_cfg = new Configuration();
_cfg.Configure();
_cfg.AddAssembly(Assembly.LoadFrom("DataLayer.dll"));
var update = new SchemaUpdate(_cfg);
update.Execute(true, false);

总结,我们可以将Factory设置为在创建此类Factory时更新架构。它可以在DEV中使用,但我想说,只在DEV中......