用流利的nhibernate映射一列两次

时间:2010-09-17 07:38:27

标签: nhibernate fluent-nhibernate nhibernate-mapping

我们走了...... 我有一个表(不幸的是我不能改变),如:

  • 日期
  • 开始时间
  • 结束时间

我有两个字段的数据类: startDateTime = date + startTime endDateTime = date + endTime

        Map(x => x.EndDateTime)
            .Columns.Clear()
            .Columns.Add("date", "endTime")
            .CustomType<MyCustomType>();

        Map(x => x.StartDateTime)
            .Columns.Clear()
            .Columns.Add("date", "startTime")
            .CustomType<MyCustomType>();

MyCustomType是一个实现IUserType接口的类。这似乎有效,但它只适用于从数据库中读取数据。保存或更新NHibernate时,将列“日期”放两次,并且无法提交查询。

我的问题是:有什么方法可以解决这个问题吗?我希望这两个字段都不是只读的。 (将其中一个设置为只读有帮助,但它不是满足我的解决方案。)

2 个答案:

答案 0 :(得分:0)

好的,我找到了一个解决方案......它不是很优雅,但这个数据库也不优雅:)

所以在我的BaseController中,它处理所有内容,如添加,保存,删除和更新,我做了一些保存这种特殊类型的特殊处理:

    public virtual T Save<T>(T entity)
    {
        try
        {
            if (entity.GetType().Equals(typeof(SpecialType)))
            {
                return SaveSpecialType<T>(entity);
            }
            ITransaction transaction = session.BeginTransaction();           
            session.Save(entity);
            transaction.Commit();
            return entity;
        }
        catch (Exception ex)
        {
            if (logError.IsErrorEnabled)
                logError.Error(ex.Message + " \n " + ex.InnerException, ex);
            throw;
        }
    }

此SaveSpecialType方法执行将该杂乱类型插入数据库的本机sql查询

答案 1 :(得分:0)

夫妻问题。如果两个不同的属性具有不同的值,即使它们应该转到相同的基础表字段,您会得到什么样的错误以及您想要做什么?