当我向一个类添加新属性时,我对NHibernate幕后发生的事情感到有些困惑。
当我向'Item'类添加属性'Price'时,我的应用程序在检索Item对象时会抛出异常,因为这个新属性不在数据库中:
[SqlException (0x80131904): Invalid column name 'Price'.]
每次我在类中声明一个新属性时,我是否应该手动将列添加到我的数据库表中?
答案 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中......