Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate映射和版本化实体_Hibernate_Nhibernate - Fatal编程技术网

Nhibernate映射和版本化实体

Nhibernate映射和版本化实体,hibernate,nhibernate,Hibernate,Nhibernate,我正在做一个使用NHibernate作为ORM的项目 正在使用的持久性模型为实体创建新行,并为每个后续保存创建一个新的entity.Id。实体的所有修订都由OriginatingId列链接,其中具有给定OriginatingId的maxentity.Id的实体是当前修订 我有两个实体a和B B需要包含对a的引用。这可以通过使用B.a_Id=a.Id上的连接进行映射来实现 问题是当保存A时,A的最新版本有一个新Id,因此如果B保持不变,它将引用实体A的旧版本 使用NHibernate的映射属性如何

我正在做一个使用NHibernate作为ORM的项目

正在使用的持久性模型为实体创建新行,并为每个后续保存创建一个新的entity.Id。实体的所有修订都由OriginatingId列链接,其中具有给定OriginatingId的maxentity.Id的实体是当前修订

我有两个实体a和B

B需要包含对a的引用。这可以通过使用B.a_Id=a.Id上的连接进行映射来实现

问题是当保存A时,A的最新版本有一个新Id,因此如果B保持不变,它将引用实体A的旧版本


使用NHibernate的映射属性如何确保在保存实体A时更新实体B的A_Id属性?

使用此版本控制时,每个实体和版本部分始终有一个主条目。您必须比您想象的更快地处理历史数据,因此您需要访问它。现在引用没有问题,因为主Id没有更改。变更零件的Id也可以是变更日期

class B
{
    public virtual int Id { get; protected set; }
    public virtual string NaturalKey { get; protected set; } // never changes
    public virtual Ilist<BData> Data { get; protected set; }

    private BData _changedData;
    public virtual BData ActualData { get { return _changedData == null ? _changedData = Data.Last().Clone() : _changedData; } }
}

class BData
{
    public BData Clone() { ... }
}

mapping.List(x => x.Data, p => p.OrderBy("changedDate"))

简而言之,您决定使用的版本控制设计是,如果它们的附加键ID发生更改,则引入新对象==不相同-这些对象是不同的。ORM原样-不是为这种场景设计的。它保留对原始对象的引用/关系ID。这是ORM最有力的部分:这个承诺是有效的。根据我的经验,这种版本控制不适合ORM。你没有做NHibernate设计支持的事情。很抱歉没有更好的评论…谢谢-我很感激使用的版本控制机制不适合NHibernate,但是现在我无法改变这一点。如果没有办法处理这种情况,我可能必须在DAL中明确地管理这种情况。有点乱!嗯,我不知道你会怎么做。您将如何发现加载到会话中的任何对象(它不是脏的)都有一个坏的旧引用id?那么所有未加载到会话中的对象呢。我只是想说:你会失败,或者付出太多的精力。。。那个抱歉没有说好话。。。但我确实受够了,至少我试着劝阻你们不要因为版本控制而改变参考模型。不管怎么说,祝你好运。。。