我有更新数据到数据库的问题。我有一个简单的多对一Product - Group关系:
public class GroupInfoMapping : ClassMap<GroupInfo>
{
public GroupInfoMapping()
{
Table("`group`");
Schema("tempdb");
Id(x => x.Id)
.GeneratedBy.Native();
OptimisticLock.Version();
Map(x => x.GroupName);
Map(x => x.ParentId);
HasMany(x => x.Products)
.KeyColumn("GroupId")
.Inverse()
.Fetch.Select()
.AsSet();
//HasMany(x => x.Children)
// .KeyColumn("Id")
// .Inverse()
// .Fetch.Select()
// .Cascade.None()
// .AsSet();
//References(x => x.Parent)
// .Class(typeof(GroupInfo))
// .Column("ParentId")
// .Fetch.Select();
}
}
public class ProductInfoMapping : ClassMap<ProductInfo>
{
public ProductInfoMapping()
{
Table("`product`");
Schema("tempdb");
Id(x => x.Id)
.GeneratedBy.Native();
OptimisticLock.Version();
Map(x => x.GroupId);
Map(x => x.ProductName);
References(x => x.Group)
.Class(typeof(GroupInfo))
.Column("GroupId")
.Fetch.Select();
}
}
如果我只更改产品数据是没有区别的,它将不允许我更新,除非:参数索引超出范围
如果我将Not.Update()添加到Product Mapping以供Group引用,我就能够更新产品数据(但是Group仍然未被引用)。
我正在使用MySql数据库,我使用每个演示者一个会话。为什么我不能同时更新实体和它的引用?我已经注释掉了自引用组的部分,因为这也会在仅更新组时产生问题。
谢谢,Goran
在您的ProductInfoMapping类中,您将同一列映射两次:
Map(x => x.GroupId);
和
References(x => x.Group)
.Class(typeof(GroupInfo))
.Column("GroupId")
.Fetch.Select();
组id的Map是不需要的,因为您可以访问group属性的id而不需要它:
var groupId = someProdInfoObj.Group.Id;
更新:
如果你仍然希望有一个GroupId属性,你可以访问Group的id,而不是直接在Group对象上访问它,你可以像这样修改属性(示例是Guid类型的id):
public virtual Guid? GroupId
{
get { return Group != null ? Group.Id : null; }
set { }
}