我試圖&新的子項保存新的父項舊的數據庫功能NHibernate保存child.parentid = parentId的新父母及兒童
我得到我的數據就好了,當我保存它保存父母和孩子。然而孩子的SillyNameParentId總是0
表結構我不能改變,所以我必須弄清楚如何使這項工作。
這裏是生成的SQL
NHibernate: INSERT INTO SillyNameParent(Description, Active) VALUES (@p0, @p1); select SCOPE_IDENTITY();@p0 = 'Test' [Type: String (1073741823)], @p1 = True [Type: Boolean (0)] NHibernate: INSERT INTO SillyChild (SillyNameCategoryId, sillyNameParentid) VALUES (@p0, @p1); select SCOPE_IDENTITY();@p0 = 0 [Type: Int32 (0)], @p1 = 1 [Type: 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; }
}
MAPS:
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");
}
}
我已經試過用成功,當sillyChild使用mapping.Refrences我得到這個錯誤:Erro脫水屬性值... Parent,InnerException:Count = 2的SqlParameterCollection的索引2無效。 – WeisserHund
我看不到錯誤?這是你的評論的一部分?親子關係非常平常。最平常的。它確實沒有「解決方法」。請提供更多信息..我們會找到解決方案。哇...我明白了。我會在一個小時內回來......並看看 –
是的,我同意這是一種非常普通的關係,我使用這種模式很多。但是我在想,因爲這個數據庫是遺留的,並且父表的ID列的名稱與引用父名稱列的子查找表列的名稱不同,再加上DB設置標識可能是模式不起作用的原因。感謝您的職位,並提前感謝您進一步調查 – WeisserHund