首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate IInterceptor实现(将原始域类没有的属性添加到DB表中)

NHibernate IInterceptor实现(将原始域类没有的属性添加到DB表中)
EN

Stack Overflow用户
提问于 2008-11-18 14:41:18
回答 1查看 927关注 0票数 5

当通过NHibernate更新/插入实体时,如何设置一些特殊的列值,而不扩展具有特殊属性的域类?

例如:在我的例子中,我希望获取对象,并在更新/插入db之前使用IInterceptor向该对象添加一些额外的信息(如用户id或计算机名)。换句话说,我想在DB表中添加一些列,而不在原始对象的类中指定新的属性。在这种情况下,我是否必须配置/更改/添加到我的Object.hbm.xml或App.config?

问题是我不能改变我的原始对象和基类,我必须弄清楚是否有可能在不改变原始对象的情况下向DB表添加信息(即使没有从任何基类继承)。

示例:

原始对象具有:FirstName ,LastName,Birthday,Address properties

Customer.hbm.xml具有:

代码语言:javascript
复制
<property name="FirstName" column="FirstName" type="string" not-null="true" length="64" />
<property name="LastName" column="LastName" type="string" not-null="true" length="64" />
<property name="Birthday" column="Birthday" type="DateTime" not-null="true"  />
<property name="Address" column="Address" type="string" not-null="true"  />

我的Interceptor类有一个方法:

代码语言:javascript
复制
public bool OnSave(object entity, object id, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)

此时,甚至在保存之前,我必须向DB Customer表添加额外的2列(例如,Computer Name和User Name ),而propertyNames[]state[]参数从一开始就没有这两列,所以这应该是动态完成的。

我的DB Customer表包含我上面描述的所有列。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-01-16 08:15:10

我还没有尝试过,但是您应该能够在工厂创建之前将动态属性添加到配置中。然后,您可以在拦截器中填充这些值。

例如,从config.ClassMappings检索相关的PersistentClass,然后向其中添加您的属性。

代码语言:javascript
复制
private void AddProperty(
        PersistentClass pc, 
        string propertyName, 
        string columnName, 
        IType dataType)
    {
        SimpleValue val = new SimpleValue(pc.Table);
        Column col = new Column(dataType, 0);
        col.Name = columnName;
        val.AddColumn(col);
        val.Type = dataType;
        Property prop = new Property(val);
        prop.IsUpdateable = true;
        prop.Name = propertyName;
        prop.PropertyAccessorName = "nosetter.camelcase";
        prop.Cascade = "none";
        pc.AddNewProperty(prop);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/298921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档