【发布时间】:2014-09-14 20:30:43
【问题描述】:
我在转换时收到此错误。
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);
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);
}
}
Feed 地图
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();
}
}
【问题讨论】:
-
您的会话在哪里开始和结束?我之前在控制器中加载某些内容时遇到过这个问题,但是当视图尝试对其执行某些操作时,会话已关闭。
-
我想你是在问保存方法?我添加了问题。
-
哦!您正在立即关闭会话.....这意味着它以后不能延迟加载内容
-
我对nhibernate不熟悉,应该怎么做才是正确的?
-
你在做一个网络应用吗?还是别的什么?
标签: c# json nhibernate fluent-nhibernate json.net