fluent-nhibernate 相关问题

Fluent NHibernate允许您在强类型C#代码中编写NHibernate映射。这允许轻松重构,提高可读性和更简洁的代码。

Fluent Nhibernate 和 npgsql 中的全局类型映射

我正在迁移我的项目以使用最新的 Npgsql 库(v 8.0.2)。我使用此构造将 C# 类型映射到 Postgres 类型: var nameTranslator = new NpgsqlSnakeCaseNameTranslator();; NpgsqlConne...

回答 1 投票 0

流畅的 NHibernate 私有字段映射

我已经生成了一些流畅的 NHibernate 代码。它的实体代码如下: 私有 ISet _cardPlace; 公共杂志类型() { _cardPlace = 新的哈希集 我已经生成了一些流畅的 NHibernate 代码。它的实体代码如下: private ISet<CardPlace> _cardPlace; public MagazineType() { _cardPlace = new HashedSet<CardPlace>(); } public virtual ISet<CardPlace> CardPlace { get { return _cardPlace; } set { _cardPlace = value; } } 该属性的映射如下: HasMany(x => x.CardPlace) .Access.CamelCaseField(Prefix.Underscore) .Cascade.AllDeleteOrphan() .Fetch.Select() .AsSet() .Inverse() .LazyLoad() .KeyColumns.Add("MAGAZINE_ID"); 我不明白的是.Access.CamelCaseField(Prefix.Underscore)线。为什么它不直接映射到属性而是映射到私有支持字段?这样做有什么理由吗? 如果删除 .Access.CamelCaseField(Prefix.Underscore) 映射将到属性 getter 和 setter。 该行指示流利的 nhiberate 使用该字段。 这里的答案将/应该/可能是:改进领域模型设计。这里的主要辅助词是“封装”。因为: 为什么我们要尝试创建实体模型(包含所有业务/验证规则)... ...同时保持后门打开,即拥有公共设置器。 有一篇非常好的文章,深入探讨了这一点: 加强您的领域:避免设置者 让我引用它的摘要(但请仔细阅读该文本) 聚合根边界在理论上很有趣,但您可能看到的许多领域模型仅具有名义上的边界。 如果域模型公开操作和命令只是为了通过直接转到属性设置器来公开绕过这些操作,那么实际上根本没有边界。 ... 保留公共设置器的理由通常是“更容易测试”。根据经验,无效的域对象更令人困惑并且更难测试,因为您无法知道在使用应用程序时您已经设置了一个实际上有效的上下文。 文章中的所有论点(请阅读)都浓缩在最后一段: 我们可以通过以下方式避免这种混乱和可能的额外防御性编码: 删除只能通过在我们的域模型上执行的操作和命令来更改的数据的公共设置器。 再次强调,这就是封装的意义所在。我们的模型只公开支持的内容,不允许不支持的内容。 注意:嗯,我确实使用公共设置器,并且我确实使用“借口”,例如“这更适合测试...... 映射到支持字段至少有几个原因。 封装,正如 Radim Köhler 在上面提到的“位于核心”。但是,让我帮忙举一些实际例子。 首先拥有一个私有支持字段可以允许在获取值或设置值时完成一些工作。 将 DB 数据映射到支持字段允许 getter 执行读取数据时正在完成的工作,并允许设置数据时完成的工作。但是,支持字段将是存储时的原始数据库数据。 您可能会问什么样的工作?假设您将数据作为标志存储在数据库中......您可以将设置器中的标志转换为某种二进制格式,然后在读取时将其从二进制格式转换回来——允许属性将转换封装为存储在数据库中的原始数据。属性可以使用相同的数据库列,对二进制或整数数据库类型进行逻辑运算。有时,您的数据库可能包含多年的数据并与其他系统集成,这不允许您轻松更改数据库格式。您的 getter/setter 可以将其转换为代码中更容易理解的格式。您甚至可以执行一些编码/解码。有很多可能性。 封装也可能涉及复杂性。 假设数据库中存储的内容涉及许多因素——类中许多事物的一些复杂结果,这些结果是由方法以及其他属性、字段、引用对象等的状态产生的。在这种情况下,您可能无法掌握所有内容设置器中的逻辑。您可能有一个私人二传手或根本没有二传手。读取该值可能仍然通过公共或受保护的 getter 进行,需要进行一些少量的工作。在这种情况下,支持字段必须保存映射。当需要工作时,您不能允许公开设置或获取属性,因为有人很容易认为他们可以直接获取或设置值并绕过转换值所需的工作。如果 setter 或 getter 直接映射到数据库中的原始数据,他们甚至可能会尝试再次重复封装在类中的工作。 在处理集合或复杂类型时,有时您需要在 getter 或 setter 中进行转换。您通过属性公开复杂类型,但数据在数据库中被归结为简单类型。组件映射也可以做到这一点。

回答 3 投票 0

如何使用流畅的 NHibernate 将双精度数映射到十进制(x,y)?

我想映射一个双精度属性,以便可以将其值存储在 SQL Server(Express 版)中。默认映射将以 sql 浮点列结束。我想要有十进制(18,6)类型的数据库列....

回答 1 投票 0

使用 NHibernate 的 SqlDateTime 溢出

我使用 NHibernate 在数据库中保存我的对象 App 对象定义了一个属性: 公共虚拟日期时间发布日期{获取;放; } 在映射类中: 地图(x => x.发布日期)....

回答 2 投票 0

NHibernate:尽管配置正确,但实体映射不正确

我面临 NHibernate 的问题,尽管配置似乎正确,但实体映射不正确。以下是该场景的摘要: 我有一个 ProductPrices 课程...

回答 1 投票 0

Castle.Facilities.NHibernate 和 FluentNHibernate v2.x

我正在使用 https://github.com/haf/Castle.Facilities.NHibernate,它是用 NHibernate 3.1 和 FluentNHibernate 1.2 构建的。我已通过 NuGet 在我的 ...

回答 1 投票 0

如何使用 linq 和流畅的 nHibernate 连接多个表(左连接)?

这是我的域类: 公共类文件 { 公共虚拟长LFD { 得到;放; } 公共虚拟长 AK_KEY_PE_WERBER { 获取;放; } 公共虚拟长 AK_KEY_PE_RECHT { 获取;设置;...

回答 1 投票 0

将实体框架中的一对多引用映射为 ids 集合,而不是实际的实体引用

在 Fluent Nhibernate 中,我可以将多个实体引用 1-M 映射为 int ids 列表: 公共类用户{ 列表 LicensesIds{ 得到; 放; } 代替 公开课

回答 2 投票 0

NHibernate OrchardCMS 和 Long Id:对象引用未保存的瞬态实例

我正在使用 OrchardCMS (1.10.x) 作为 Web 应用程序。 OrchardCMS 使用整数字段作为数据库的主键(ContentItemRecord.Id)。然而,很快,Web 应用程序将需要的不仅仅是通过最大值

回答 1 投票 0

无法从nhibernate.driver.sqlclientdriver创建驱动程序,nhibernate,version=5.3.0.0,culture=neutral,publickeytoken=aa95f207798dfdb4

我在 .net 6 项目中遇到以下错误 FluentNhibernate 但相同的代码在框架 4.8 中工作。 错误:无法从 nhibernate.driver.sqlclientdriver、nhibernate、vers 创建驱动程序...

回答 1 投票 0

带有 Microsoft.Data.Sqlite 的 Fluent nhibernate BuildSessionFactory 无法工作

尝试使用流畅的nhibernate在Microsoft.Data.Sqlite上建立会话工厂。所有引用均已添加,并且在运行时可在 bin 文件夹中使用。 var sessionFactory = Fluently.Configure...

回答 1 投票 0

如何将Castle Activerecord转换为纯NHibernate或Fluent NHibernate?

我将把一个不断增长的项目从使用 Castle Activerecord 重构为纯 NHibernate 或具有服务/存储库模式和 POCO 的 Fluent NHibernate。 获得 hbm 最简单的方法是什么...

回答 3 投票 0

如何在流畅的nhibernate和syscache2中配置缓存区域

我一直在尝试使用流畅的 nhibernate 实现缓存区域,到目前为止我已经完成了以下操作: 1) 在 Fluently.Configure() 中设置缓存: 私有静态 ISessionFactory CreateSessionFactor...

回答 1 投票 0

映射 HasMany 关系,无需任何键列 - 仅Where()

从概念上讲,我想映射这样的集合: HasMany(x => x.Children).Where("some_column_name='foo'"); HasMany() 的默认模式要求我提供一个 KeyColumn ,它...

回答 1 投票 0

如何使用 FluentNHibernate 配置通用组件?

这是我要配置映射的组件 公共类 Range : ValueObject { 公共虚拟 T Start {get;放;} 公共虚拟 T 完成 {get;放;} } 在我做...

回答 1 投票 0

从子选择中选择数据

这就是我想使用 NHibernate QueryOver 完成的任务: 选择前 10 名*: (SELECT aColumn, min(WorkingDay) as d 来自表 按列分组...

回答 1 投票 0

枚举解析似乎不适用于 Fluent NHibernate

我有一个数据访问类,带有一个名为 Salutation 的枚举: 公共枚举称呼 { 未知 = 0, 女士 = 1, ETC 先生=5, ETC } 我正在使用 NHibernate 继续课程,并且...

回答 3 投票 0

流畅的 NHibernate 映射 IList<Point> 作为单列的值

我有这门课: 公共类 MyEntity { 公共虚拟int Id { 得到;放; } 公共虚拟 IList 向量 { get;放; } } 如何将 Fluent NHibernate 中的向量映射到

回答 1 投票 0

Nhibernate 一对一映射代码

当引用列不是第二个表上的主键列时,我正在尝试找出一种在 nhibernate 中映射一对一关系的方法。 例如考虑 人物表 PersonId ...

回答 2 投票 0

NHibernate:可以直接从我的实体类操作存储库吗?

我有一个通过 Fluent NHibernate 的 AutoPersistenceModel 使用 NHibernate 的自定义存储库实现。 我有一堆实体类,我坚持使用这个存储库。 问题是,...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.