[英]Converting Nhibernate Object to JSON
轉換時出現此錯誤。
Initializing [Entity.Tag#8]-無法延遲初始化角色集合:Entity.Tag.Feed,沒有會話或會話被關閉
Feed feed = new Feed();
Tag tag = Tag.READ.ById(8);
feed.Tag.Add(tag);
feed.Language = ENLanguage.EN;
feed.Name = "Foo";
feed.Save();
string x = JsonConvert.SerializeObject(feed);
飼料分類
public class Feed : BaseClass<Feed>
{
public virtual int FeedId { get; set; }
public virtual IList<Tag> Tag { get; set; }
public virtual ENLanguage Language { get; set; }
public virtual string Name { get; set; }
public Feed()
{
Tag = new List<Tag>();
}
public virtual void AddTag(Tag tag)
{
tag.Feed.Add(this);
Tag.Add(tag);
}
}
資訊提供地圖
public class FeedMap : ClassMap<Feed>
{
public FeedMap()
{
Id(x => x.FeedId);
HasManyToMany(x => x.Tag).Cascade.All().Table("FeedTag");
Map(x => x.Language).CustomType<short>();
Map(x => x.Name);
}
}
標簽類別
public class Tag : BaseClass<Tag>
{
public virtual int TagId { get; set; }
public virtual IList<Feed> Feed { get; protected set; }
public virtual string Name { get; set; }
}
標簽圖
public class TagMap : ClassMap<Tag>
{
public TagMap()
{
Id(x => x.TagId);
Map(x => x.Name);
HasManyToMany(x => x.Feed).Cascade.All().Inverse().Table("FeedTag");
}
}
保存方式
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.SaveOrUpdate(x);
transaction.Commit();
}
}
聽起來您的會話結束得太快了。 您僅打開它進行保存。
嘗試
using (var session = NHibernateHelper.OpenSession())
{
Feed feed = new Feed();
Tag tag = Tag.READ.ById(8);
feed.Tag.Add(tag);
feed.Language = ENLanguage.EN;
feed.Name = "Foo";
feed.Save();
string x = JsonConvert.SerializeObject(feed);
}
我認為您的問題是,當您從數據庫中獲取對象時,您不初始化類Tag的惰性集合IList Feed
Tag.READ.ById(8); // in that method you have to initialize Feed
就像是
using(session = NHibernateHelper.OpenSession())
{
var TagObjectFromDb = session.Get<Tag>(id);
NHibernateUtil.Initialize(TagObjectFromDb.Feed);//initialize lazy collection,
return TagObjectFromDb;
}
和
Feed fbfeed = new Feed();//fbfeed - typo?
Tag tag = Tag.READ.ById(8);
feed.Tag.Add(tag);//fbfeed - typo?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.