我有一个拥有拥有类的类,这两个类都可以有版本。
如果我更新了拥有类的版本,我不想创建子类的新版本,所以当我在数据库中保存新版本的所有类时,我希望从子类到仍然是有效的根据拥有级别的主键和这个"类"
的最大版本public class Child
{
property Owner Parent { get; set;}
property int Version { get; set; }
}
public class Owner
{
property Guid Id { get; set; }
property int Version { get; set; }
property string Identifier { get; set; }
property string Namn { get; set; }
}
如果我现在想要选择一个带有nhibernate的子类,并希望自动选择由Identifier属性标识的最新版本的Parent类。由于所有版本具有相同的值,因此该标识符值不是唯一的。 Owner类的Id是用于标识相同元素的不同版本的Guid。
所以我的问题是如何在映射hbm时创建它,这样当它的所有者获得新版本时,不需要对Child类的项进行更新
在sql中,这将类似于
Select * From Child c
Inner Join Owner o on o.Identifier = c.Identifier
and o.Version = (Select Max(o2.Version) From Owner o2 Where o.Identifier = o2.Identifier)
询问问题是否不清楚
答案 0 :(得分:0)
提供的sql意味着数据库端没有外键。
具有所需属性的常规方法是将类拆分为固定部分和版本部分。不需要更改引用。
还评估你是否真的需要Guid或者整数类型是否足够
public class Child
{
property Owner Parent { get; set;}
property int Version { get; set; }
}
class Owner
{
public virtual Guid Id { get; protected set; }
public virtual string NaturalKey { get; protected set; } // never changes
public virtual Ilist<OwnerData> Data { get; protected set; }
public virtual BData ActualData { get { return Data.Last(); } }
public virtual BData GetActualDataToEdit()
{
var newData = ActualData.Clone();
newData.Version++;
Data.Add(newData);
return newData;
}
}
class OwnerData
{
public virtual int Version { get; protected set; }
public OwnerData Clone() { ... }
}
// e.g. FluentNHibernate mapping
mapping.List(x => x.Data, p => p.OrderBy("Version"))