Dan*_* W. 1 nhibernate fluent automapping
我使用Fluent NHibernate和自动功能.现在我正在寻找像配置,设置,自定义属性 - 无论如何 - 将实体属性声明为"ReadOnlyFromDb"
在MsSql数据库中,我在其中一个表中使用计算列,其中根据特定数据行的某些其他值计算值.现在我已将实体类中的此列声明为
public virtual int STATUS { get; private set; }
获取表格的具体数据一切正常.STATUS使用数据表中的特定值填充属性.
当我尝试SaveUpdate()特定对象时出现问题.我总是得到例外
A computed column cannot be the target of an INSERT or UPDATE statement
这对我的理解是正确的 - 以及它应该如何;)!
基本上我正在寻找配置,设置,自定义属性 - 无论如何 - 要说
Hey Fluent NHibernate - 获取特定属性
propertyName但不插入/更新属性propertyName
有类似的东西吗?或者这种情况是否存在解决方法?我搜索了流利的nhibernate wiki,但没有找到一个smilliar案例.
我希望有人已经面对并解决了这个问题!
以下是我创建会话的代码片段(可能有帮助):
    public static ISessionFactory GetNHibernateSession()
    {
        if (nhibernateSession != null)
            return nhibernateSession;
        if (ConfigurationManager.AppSettings[msSqlConnectionString] == null || ConfigurationManager.AppSettings[msSqlConnectionString] == String.Empty)
            throw new NullReferenceException(String.Format("AppSetting '{0}' must not be null!", msSqlConnectionString));
        //nhibernateSession = Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.ConnectionString(ConfigurationManager.AppSettings[msSqlConnectionString]))
        //                              .Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<T_ABWEICHUNGEN>().IgnoreBase<BaseClass>)).BuildSessionFactory();
        nhibernateSession = Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.ConnectionString(ConfigurationManager.AppSettings[msSqlConnectionString]))
                                   .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(System.Reflection.Assembly.GetExecutingAssembly())
                                   .Override<T_ABWEICHUNGEN>(map =>map.Map(d => d.A08_STATUS_FILE).Length(2147483647))
                                   .IgnoreBase(typeof(BaseClass))
                                   .IgnoreBase(typeof(IDColumn))
                                   .IgnoreBase(typeof(MsSqlQuery))
                                   .IgnoreBase(typeof(MsSqlParamCollection))
                                   .IgnoreBase(typeof(AbweichungStatus))
                                   )).BuildSessionFactory();
        return nhibernateSession;
    }
}
感谢到目前为止的回应 - 迄今为止帮助了我.但是 - 有没有办法让这个问题更"动态"地解决?
例如:
我想声明一个名为[ReadOnlyDbField]now 的自定义属性,声明具有此cusomt属性的实体的所有属性:只需读取此值,不要更新/插入它.
基本上我想在配置中说
Map all properties with the custom attribute [ReadOnlyDbField] to Not.Insert().Not.Update()
有没有办法实现这个?
.Override<Entity>(map => map.Map(d => d.STATUS).Not.Insert().Not.Update())
更新:已编辑问题的帐户
public class ReadonlyDbFielConvention : AttributePropertyConvention<ReadOnlyDbField>
{
    protected override void Apply(ReadOnlyDbField attribute, IPropertyInstance instance)
    {
        instance.Not.Insert();
        instance.Not.Update();
    }
}
| 归档时间: | 
 | 
| 查看次数: | 1362 次 | 
| 最近记录: |