【发布时间】:2013-12-13 20:59:22
【问题描述】:
我正在尝试将新的父项和新的子项保存到旧数据库中
我的数据很好,当我保存它时会同时保存父母和孩子。但是 Child 的 SillyNameParentId 始终为 0
我无法更改表结构,因此我必须弄清楚如何进行这项工作。
这里是生成的 SQL
NHibernate:INSERT INTO SillyNameParent(描述,活动)值 (@p0,@p1);选择 SCOPE_IDENTITY();@p0 = 'Test' [类型:字符串 (1073741823)], @p1 = True [类型:布尔 (0)] NHibernate:插入 SillyChild (SillyNameCategoryId, sillyNameParentid) 值 (@p0, @p1); 选择 SCOPE_IDENTITY();@p0 = 0 [类型:Int32 (0)],@p1 = 1 [类型: Int32 (0)]
最终我希望将@p1 设置为 SillyNameParentId/Parentid
表格:
SillyNameParent
Column PK-IsIdentity: ParentId
Column varchar(255): Description
Column bit: Active
SillyChild //I'm a lookup table
Column int IsIdentity: Id
Column int PK: SillyNameParentId
Column int PK: SillyNameCategoryID
型号:
public class SillyNameParent: Entity
{
public SillyNameParent()
{
Children= new List<SillyChild>();
}
public virtual string AreaOfConcernDesc { get; set; }
public virtual bool Active { get; set; }
public virtual IList<SillyChild> Children{ get; set; }
}
public class SillyChild: Entity
{
public virtual int SillyNameParentId { get; set; }
public virtual int SillyNameCategoryId{ get; set; }
public virtual SillyNameParent Parent { get; set; }
}
地图:
public class SillyNameParentMap : IAutoMappingOverride<SillyNameParent>
{
public void Override(AutoMapping<SillyNameParent> mapping)
{
mapping.Table("SillyNameParent");
mapping.Id(x => x.Id).Column("ParentId").GeneratedBy.Identity();
mapping.Map(x => x.Description).Not.Nullable();
mapping.Map(x => x.Active).Nullable();
mapping.HasMany(x => x.children)
.Cascade.All()
.KeyColumn("SillyNameParentId")
.Not
.LazyLoad();
}
}
public class SillyChildMap: IAutoMappingOverride<SillyChild>
{
public void Override(AutoMapping<SillyChild> mapping)
{
mapping.Table("SillyChild");
mapping.Id(x => x.Id).Column("Id").GeneratedBy.Identity();
mapping.Map(x => x.SillyNameParentId).Not.Nullable();
mapping.Map(x => x.SillyNameCategoryId).Not.Nullable();
mapping.HasOne(x => x.Parent).ForeignKey("SillyNameParentId");
}
}
【问题讨论】:
标签: c# nhibernate fluent-nhibernate