Tag: fluent nhibernate

尝试实现策略模式时的WrongClassException(区分自己的Id)

我正在尝试使用Fluent Nhibernate实现策略模式,受此博客文章的启发 public abstract class Strategy { protected Strategy() { } protected Strategy(Guid id) { this.Id = id; } public virtual Guid Id { get; set; } public abstract void SomeMethod(); } public class MyStrategy : Strategy { public MyStrategy() : base(new Guid(“F1CF041B …”)) { } public override void SomeMethod() { } } public class […]

如何在Fluent nHibernate中使用ObservableCollection?

ObservableCollection Items 但现在在Fluent nHibernate我不知道如何使用它。 是否有一种简单的方法可以使用Fluent nHibernate的ObservableCollection? 我注意到有一个DLL NHibernate.Collection.Observable; 但我不知道如何替换使用IList的当前代码: public virtual IList Items { get { return _Items; } set { _Items = value; OnPropertyChanged(System.Reflection.MethodBase.GetCurrentMethod().Name.Substring(4)); /*OnPropertyChanged(“Items”);*/ } } private IList _Items; 如何更改上面的代码使其与Observable Collection和Fluent nHibernate一起使用?

HasManyToMany Fluent NHibernate映射删除错误

我一直在研究一个名为Task的实体上的多对多映射。 任务可以有很多孩子和许多父母。 在它们之间有一个连接表,它只有两个FK列“ParentTaskId”和“ChildTaskId”。 这是我到目前为止所提出的。 // Many-to-Many Parents HasManyToMany(x => x.Parents) .Table(“TaskDependency”) .ParentKeyColumn(“ParentTaskId”) .ChildKeyColumn(“ChildTaskId”) .Inverse() .Not.LazyLoad() .Cascade.SaveUpdate(); // Many-to-Many Children HasManyToMany(x => x.Children) .Table(“TaskDependency”) .ParentKeyColumn(“ChildTaskId”) .ChildKeyColumn(“ParentTaskId”) .Not.LazyLoad() .Cascade.SaveUpdate(); 这里有一些示例代码可以帮助我说明我的问题。 以下代码有效: _taskRepository.Save(_taskVendor); _taskRepository.Save(_taskClientVendor); _taskRepository.Save(_taskClient); _taskVendor.Children.Add(_taskClientVendor); _taskClientVendor.Children.Add(_taskClient); _taskRepository.Save(_taskVendor); _taskRepository.Save(_taskClientVendor); _taskRepository.Delete(_taskVendor); _taskRepository.Delete(_taskClientVendor); _taskRepository.Delete(_taskClient); 但是,如果我将删除语句的顺序更改为: _taskRepository.Delete(_taskVendor); _taskRepository.Delete(_taskClient); _taskRepository.Delete(_taskClientVendor); 我的多对多联接表中出现了fk约束违规。 我认为这与我在映射上设置逆向的方式有关。 它会影响执行查询的顺序,以避免出现这种精确的fk约束问题。 有没有办法映射这个,以便我可以删除任何一方,子或父,但没有此exception的实体? 我在映射的两边都尝试了反向,但这导致了我的多对多关系没有被保存。 > _ < 任何帮助将非常感激。

NHibernate何时使用延迟加载?

我对延迟加载的理解是它只在需要对象时才加载,我们应该使用它。 请解释一下我们必须使用哪些场景而不使用它? 提前致谢。

Nhibernate n + 1与三元关系。 想要三元组中的中间实体

我对nhibernate n + 1有一个很大的问题,我尝试的似乎没有解决问题。 Nhibernate profiler仍显示n + 1选择命中数据库。 这是我的模特: public class CustomerGroup : CoreObjectBase { public virtual long GroupId { get; set; } public virtual Site Site { get; set; } public virtual IList Customers { get; set; } public virtual string Name { get; set; } public virtual string DisplayName { get; set; } […]

流畅的NHibernate集合表每子类

我在Fluent NHibernate中遇到inheritance问题。 我之前设法让Table-Per-Subclass工作,但我无法获得基类的集合。 它正在寻找我没有的基类表。 这是我的架构: User(Id, Name, Email) User_Account_Password(Id, UserId, PasswordHash, Salt) User_Account_Facebook(Id, UserId, FacebookId) 这是我的对象模型: public class User { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Email { get; set; } public virtual IList Accounts { get; set; } } public abstract […]

如何使用Fluent-NHibernate和MySQL指定自动递增(int)标识列

标题基本上都说明了……我正在尝试使用Fluent-NHibernate和MySQL指定一个自动递增(int)标识列。 我尝试了以下变化…… Id(x => x.ID).GeneratedBy.Native(); Id(x => x.ID).GeneratedBy.Identity(); Id(x => x.ID).GeneratedBy.Increment(); …并尝试在每个上设置默认值。 注意:我使用的是int数据类型,并且收到了诸如…之类的错误 “输入字符串的格式不正确。” 要么… “字段’ID’没有默认值’

NHibernate的; 删除子项删除父项?

删除子项(Employee)时,为什么删除了父项(Store) ? 我用常规Cascade.All配置。 用户输入序列非常简单: 从空数据库开始 添加父级 保存,加载(加载=重新加载完整对象图) 添加一个孩子 保存,加载 删除孩子 结果:清空数据库。 (父母已删除) 这可能是一个基本的映射错误,因为这是我对NHibernate的第一次采访。 我希望Store成为聚合根 ,并认为通过不在 Store.Staff属性上设置Inverse,然后Store表将负责保存,因此聚合根。 这是一种误解吗? 实际上如果我使用Inverse,我仍然会得到相同的结果。 所以也许这不是问题,但我也想了解这一点。 并且故意不使用更广泛的会话范围,因为我想学习如何使用分离和瞬态实体。 员工删除方法: class EmployeeRepository public static void Delete(Employee employee) { using (ISession session = FNH_Manager.OpenSession()) { using (ITransaction transaction = session.BeginTransaction()) { if (employee.Id != 0) { var emp = session.Get(typeof(Employee), employee.Id); if (emp != null) […]

NHibernate.AssertionFailure:null标识符

在我将计算机推入下周之前…… 我已经检查了所有关于此问题的其他问题,但他们都没有解决方案。 我已经剥离了这个代码,但它仍然没有工作。 保存对象时出现此错误:NHibernate.AssertionFailure:null标识符 这是我的映射文件: public class OrderMap : BaseMap { public SalesOrderMap() { Id(x => x.Id).Column(“OrderId”); } } 这是实体: public class Order { public virtual int Id { get; protected set; } } 这是我的测试代码: Order order = new Order(); ISession session = SessionFactory.GetCurrentSession(); session.SaveOrUpdate(order); <—-EXCEPTION ON THIS LINE session.Flush(); 然后爆炸……它打破了 [AssertionFailure: null identifier] NHibernate.Engine.EntityKey..ctor(Object […]

使用Fluent NHibernate映射大字符串

我正在使用Oracle DB,我正在尝试映射这个类: public class Book { public virtual int Id { get; private set; } public virtual string Author { get; set; } public virtual string Title { get; set; } public virtual string Text { get; set; } } 使用此映射类: public class BookMap : ClassMap { public BookMap() { Id(x => x.Id); Map(x => […]