I found many similar questions about SO, I tried the specified permissions, but none of them worked for me, can someone tell me what is wrong in the following code, what corrections need to be done to make it work:
Models:
public class ParentDataClassData
{
public ParentDataClassData()
{
TitleSetTitles = new List<ChildDataClass1>();
TitlesSetEvents = new List<ChildDataClass2>();
}
public virtual int TitleSetID { get; set; }
public virtual string Name { get; set; }
public virtual IList<ChildDataClass1> TitleSetTitles { get; set; }
public virtual IEnumerable<ChildDataClass2> TitlesSetEvents { get; set; }
public virtual object IdentityField
{
get { return TitleSetID; }
}
}
public class ChildDataClass1
{
public ChildDataClass1()
{
TitleSet = new ParentDataClassData();
TitleSetTitleEventMedias = new List<TitleSetTitleEventMediaData>();
}
public virtual int TitleSetID
{
get { return TitleSet.TitleSetID; }
}
public virtual ParentDataClassData TitleSet { get; set; }
public virtual IList<TitleSetTitleEventMediaData> TitleSetTitleEventMedias { get; set; }
public virtual object IdentityField
{
get { return TitleSetTitleID; }
}
}
public class ChildDataClass2
{
public virtual ParentDataClassData TitleSet { get; set; }
public virtual int TitleSetEventID
{
get;
set;
}
public virtual object IdentityField
{
get { return TitleSetEventID; }
}
}
Mapping:
public class ParentDataClassMap : ClassMap<ParentDataEntity>
{
public ParentDataClassMap()
{
Table("TitleSet");
LazyLoad();
Id(x => x.TitleSetID)
.Column("TitleSetID")
.GeneratedBy.Native()
.UnsavedValue(0);
HasMany(x => x.TitleSetTitles)
.LazyLoad()
.Inverse()
.Fetch.Subselect()
.Cascade.SaveUpdate()
.KeyColumn("TitleSetID");
HasMany(x => x.TitlesSetEvents)
.LazyLoad()
.Inverse()
.Cascade.SaveUpdate()
.Fetch.Subselect()
.KeyColumn("TitleSetID");
}
}
public class ChildDataClass1Map : ClassMap<ChildDataClass1>
{
public ChildDataClass1Map()
{
Table("TitleSetTitle");
Id(x => x.TitleSetTitleID)
.Column("TitleSetTitleID")
.GeneratedBy.Native()
.UnsavedValue(0);
References(x => x.TitleSet)
.Fetch.Join()
.Not.Nullable()
.Column("TitleSetID")
.Cascade.None();
HasMany(x => x.TitleSetTitleEventMedias)
.LazyLoad()
.Inverse()
.Cascade.AllDeleteOrphan()
.Fetch.Subselect()
.KeyColumn("TitleSetTitleID");
}
}
public class ChildDataClass2Map : ClassMap<ChildDataClass2>
{
public ChildDataClass2Map()
{
Table("TitleSetEvent");
Id(x => x.TitleSetEventID)
.Column("TitleSetEventID")
.GeneratedBy.Native()
.UnsavedValue(0);
References(x => x.TitleSet)
.Column("TitleSetID")
.Not.Update()
.Not.Insert()
.Cascade.None();
Map(x => x.LengthSec).Not.Nullable();
Map(x => x.EventID).Not.Nullable();
HasMany(x => x.TitleSetDefaultEventMedia)
.LazyLoad()
.Inverse()
.Cascade.None()
.Fetch.Join()
.KeyColumn("TitleSetEventID");
HasMany(x => x.TitleSetTitleEventMedias)
.LazyLoad()
.Inverse()
.Cascade.None()
.Fetch.Join()
.KeyColumn("TitleSetEventID");
}
}
Test:
[Test]
public void CanAddNewTitleSet()
{
var titleSet = new TitleSetDataEntity
{
Name = "Somename",
ProgramServiceID = 1,
CreatedBy = "someuser",
CreatedDate = DateTime.Now,
ModifiedBy = "someuser",
ModifiedDate = DateTime.Now,
TitleSetTitles = new List<TitleSetTitleData>
{
new TitleSetTitleData
{
IsIncluded = true,
IsPremiere = true,
TitleTypeCode = "somecode",
}
},
TitlesSetEvents = new List<TitleSetEventData>()
};
Session.SaveOrUpdate(titleSet);
}
and getting an exception:
NHibernate.AdoNet.AbstractBatcher: NHibernate.AdoNet.AbstractBatcher [(null)] - : INSERT INTO TitleSetTitle ([TitleID],..., TitleSetID) VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8); SCOPE_IDENTITY() System.Data.SqlClient.SqlException(0x80131904): NULL "TitleSetID", "TitleSetTitle"; null. INSERT . .
P.S.
- ,
ParantClassData, , Child . - , .
!
, , , , TitleSetID readonly, .