mar*_*nes 8 nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping
我有以下两个班级:
广告
public virtual int Id { get; set;
public virtual IList<AdvertImage> AdvertImages { get; set; }
Run Code Online (Sandbox Code Playgroud)
AdvertImage
public virtual int Id { get; set; }
public virtual string Filename { get; set;
public virtual Advert Advert { get; set; }
Run Code Online (Sandbox Code Playgroud)
在数据库中,我的AdvertImages表具有FK'AdvertId',它与具有'Id'PK的广告表相关.
这是一对多映射,因为一个广告可以有许多图像.
我的Fluent NHibernate映射(为简洁起见编辑)是:
AdvertMap
Id(x => x.Id)
.GeneratedBy.Identity();
...
HasMany(x => x.AdvertImages)
.KeyColumn("AdvertId")
.Inverse();
...
Table("Adverts");
Run Code Online (Sandbox Code Playgroud)
AdvertImageMap
Id(x => x.Id)
.GeneratedBy.Identity();
...
References(x => x.Advert)
.Column("AdvertId");
...
Table("AdvertImages");
Run Code Online (Sandbox Code Playgroud)
我正在创建一个新的Advert代码实例,然后AdvertImages使用a 填充属性(广告)List<AdvertImage>.
当我将我的Advert对象持久保存到数据库时,我希望将AdvertImages插入到他们的AdvertImages表中,但是由于两个表之间的关系,我需要首先发生广告插入,以便生成PK Id ,然后可以插入AdvertImages表中.(当我创建AdvertImage列表时,我正在填充Filename属性,但显然在该阶段没有新的AdvertId,所以希望在广告持久保存到数据库时填充它).
我尝试过尝试不同的Inverse()和Cascade设置,但还没有成功.有人可以帮忙吗?
Col*_*e W 10
您需要将Advert映射更改为级联:
Id(x => x.Id)
.GeneratedBy.Identity();
HasMany(x => x.AdvertImages)
.KeyColumn("AdvertId")
.Inverse()
.Cascade.AllDeleteOrphan();
Table("Adverts");
Run Code Online (Sandbox Code Playgroud)
然后你应该能够做这样的事情来坚持一个Advert对象和它的孩子AdvertImage.
Advert newAdvert = new Advert();
AdvertImage newImage = new AdvertImage();
newImage.Advert = newAdvert;
newAdvert.AdvertImages.Add(newImage);
using(NHibernate.ISession session = SessionFactory.GetCurrentSession())
{
using (NHibernate.ITransaction tran = session.BeginTransaction())
{
session.Save(newAdvert);
tran.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
我的实体通常包含双向一对多关系的Add和Remove方法,如下所示:
public class Advert
{
public virtual IList<AdvertImage> AdvertImages { get; set; }
public virtual void AddImage(AdvertImage newImage)
{
newImage.Advert = this;
AdvertImages.Add(newImage);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14679 次 |
| 最近记录: |