Tag: fluent nhibernate

流利的NHibernate多对多

我正在使用Fluent NHibernate并且遇到一些问题,我的一个类可以设置多对多的关系。 这可能是一个愚蠢的错误,但我已经陷入了一点点试图让它运作。 无论如何,我有几个有许多关系的课程。 public class Person { public Person() { GroupsOwned = new List(); } public virtual IList GroupsOwned { get; set; } } public class Groups { public Groups() { Admins= new List(); } public virtual IList Admins{ get; set; } } 映射看起来像这样 人:…… HasManyToMany(x => x.GroupsOwned) .WithTableName(“GroupAdministrators”) .WithParentKeyColumn(“PersonID”) .WithChildKeyColumn(“GroupID”) .Cascade.SaveUpdate(); 团体:…… HasManyToMany(x […]

NHibernate代码生成

我正在使用NHibernate和一些代码生成工具。 MyGeneration是一个,SmartCode是另一个。 之前已经问过这个问题,但我已经看了一些其他的响应,发现nHibernate空间中的代码生成工具非常差。 我可能能够使用MyGeneration和SmartCode,但是你有没有其他可能的用途,并且会推荐? 我想我的标准是他们必须使用MSSQL 2008,目前正在开发的工具也会很好,因为似乎某些工具不再被积极开发。 理想情况下,这些工具也会生成域对象,还有nhibernate映射文件 – Fluent nhibernate会很好但不是必需的。 如果可以调整代码生成的模板和方法,那将是很好的。 我是一名开发人员,所以很高兴能够通过合适的工具进行更改。 谢谢。

流畅的nhibernate – 在同一实体上的多对多关系映射

我在尝试绘制多对多关系时遇到问题,其中关系的两侧都引用同一个实体。 我正在使用Fluent NHibernate和NH3.1。 基本上,情况是这样的 – 我有一个类别,可以有多个父母。 因此,一个类别有多个其他类别作为父类,以及多个其他类别作为其子类。 HasManyToMany(x => x.ParentCategories).AsBag().Table(“parentcategorychildren”).ParentKeyColumn(“ChildID”).ChildKeyColumn(“ParentID”).Cascade.SaveUpdate(); HasManyToMany(x => x.ChildrenCategories).AsBag().Table(“parentcategorychildren”).ParentKeyColumn(“ParentID”).ChildKeyColumn(“ChildID”).Inverse(); 但是,当我尝试构建工厂时,我收到以下错误: Category.ChildrenCategories与Category.ChildrenCategories的关系在双方都指定了Inverse。 从关系的一侧移除反向。 我发现奇怪的是为什么它提到Category.ChildrenCategories的“Category.ChildrenCategories”,而不是ParentCategories? 任何帮助将不胜感激 ! 我刚刚为此创造了一笔赏金,因为它对我来说非常重要。 拜托,我对“你不能这样做”作为答案不感兴趣。

使用流利的nhibernate时,我做错了很多次吗?

我有两个主要实体(数据库表) 项目 应用 我有一个名为ProjectApplication的桥表,带有3列(Id,ProjectId,ApplicationId) 一个项目可以有很多应用程序。 应用程序可以在很多不同的项目下面 您的基本多对多映射 目前这是我在流利的nhibernate映射文件中设置的 public class ProjectMap { HasMany(x => x.ProjectApplications) .AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80); } public class ApplicationMap { HasMany(x => x.ProjectsApplications) .AsBag().Inverse().Fetch.Select().BatchSize(50); } 这是否有任何缺点,因为我看到有一个HasManyToMany语法所以我不确定它是否在生成的查询或性能等方面有所作为 请指教

如何做一个流利的nhibernate一对一映射?

我该怎么做我试图进行一对一的映射。 public class Setting { public virtual Guid StudentId { get; set; } public virtual DateFilters TaskFilterOption { get; set; } public virtual string TimeZoneId { get; set; } public virtual string TimeZoneName { get; set; } public virtual DateTime EndOfTerm { get; set; } public virtual Student Student { get; set; } } //类地图 […]

确保NHibernate SessionFactory仅创建一次

我编写了一个NHibernateSessionFactory类,它包含一个静态的Nhibernate ISessionFactory。 这用于确保我们只有一个会话工厂,并且第一次调用OpenSession()我创建了一个实际的SessionFactory – 下次我使用它并在其上打开一个会话。 代码如下所示: public class NhibernateSessionFactory : INhibernateSessionFactory { private static ISessionFactory _sessionFactory; public ISession OpenSession() { if (_sessionFactory == null) { var cfg = Fluently.Configure(). Database(SQLiteConfiguration.Standard.ShowSql().UsingFile(“Foo.db”)). Mappings(m => m.FluentMappings.AddFromAssemblyOf()); _sessionFactory = cfg.BuildSessionFactory(); BuildSchema(cfg); } return _sessionFactory.OpenSession(); } private static void BuildSchema(FluentConfiguration configuration) { var sessionSource = new SessionSource(configuration); var session = […]

使用Fluent NHibernate进行映射时对接口进行编程

我已经被提交并已经开始学习Fluent NHibernate(没有以前的NHibernate经验)。 在我的项目中,我正在编程接口以减少耦合等。这意味着几乎所有“一切”都指的是接口而不是具体类型(IMessage而不是Message)。 这背后的想法是通过能够模拟依赖关系来帮助使其更易于测试。 但是,(流畅)当我尝试映射到接口而不是具体类时,NHibernate不喜欢它。 问题很简单 – 根据Fluent Wiki,例如,定义我的类的ID字段是明智的 int Id { get; private set; } 获取典型的自动生成的主键。 但是,这只适用于具体的类 – 我不能在接口上指定访问级别,同一行必须是这样 int Id { get; set; } 而且我认为否定在具体类中将setter设为私有(这个想法是只有NHibernate应该将ID设置为由DB分配)。 就目前而言,我想我只会公开制定者,并试图避免写入它的诱惑。但是,是否有人知道什么是“适当的”,最佳实践方式来创建一个正确的主键只有NHibernate可以写入的字段,同时仍然只编程到接口? 更新 根据我在mookid和James Gregory的两个答案后的理解,我可能会走错路 – 我不应该有理由让每个实体拥有一个接口,就像我现在一样。 这一切都很好。 我想我的问题就变成了 – 是否没有理由对任何实体的接口进行100%编程? 如果甚至有一种情况可以certificate这是合理的,那么可以用(流利的)NHibernate做到这一点吗? 我问,因为我不知道,不要批评。 谢谢你的回复。 🙂

如何创建NHibernate HasManyToMany关系

我知道有关于HasManyToMany的问题,但这次我想把几个字段放到中间表中,如’Description,CreationDate’。 对于我的情况,我不想双向绑定。 我有公司,人员和地址表。 每个公司或个人可能有超过1个地址。 在这种情况下我该怎么办? 我应该如何编写类和映射的代码? 您可以在下面看到表格: