草庐IT

NHibernate3

全部标签

c# - 使用 SQLite :memory: with NHibernate 时出现问题

我将NHibernate用于我的数据访问,有一段时间我一直在使用SQLite进行本地集成测试。我一直在使用一个文件,但我想我会放弃:memory:选项。当我启动任何集成测试时,数据库似乎已创建(NHibernate吐出表创建sql)但与数据库交互会导致错误。有没有人用过NHibernate来处理内存数据库?有可能吗?我使用的连接字符串是这样的:DataSource=:memory:;Version=3;New=True 最佳答案 SQLite内存数据库仅在与其连接保持打开时才存在。要在NHibernate的单元测试中使用它:1.在测

c# - NHibernate Session.Flush() 在没有发生更新时发送更新查询

我有一个NHibernatesession。在此session中,我执行了1个操作,即运行此代码以获取列表:publicIListGetCustomerByFirstName(stringcustomerFirstName){return_session.CreateCriteria(typeof(Customer)).Add(newNHibernate.Expression.EqExpression("FirstName",customerFirstName)).List();}我在HttpRequest的末尾调用Session.Flush(),我得到了一个HibernateAdoE

c# - NHibernate Session.Flush() 在没有发生更新时发送更新查询

我有一个NHibernatesession。在此session中,我执行了1个操作,即运行此代码以获取列表:publicIListGetCustomerByFirstName(stringcustomerFirstName){return_session.CreateCriteria(typeof(Customer)).Add(newNHibernate.Expression.EqExpression("FirstName",customerFirstName)).List();}我在HttpRequest的末尾调用Session.Flush(),我得到了一个HibernateAdoE

c# - 覆盖长文本字符串的流利 NHibernate nvarchar(MAX) 而不是 nvarchar(255)

当你在fluentNHibernate中设置一个字符串值时,它总是将DB值设置为Nvarchar(255),我需要存储相当多的基于用户输入的长字符串,而255是不切实际的。补充一下,这是自动映射器的一个问题,因为我正在使用流畅的NHibernate来构建数据库。 最佳答案 添加此约定会将字符串属性的默认长度设置为10000。正如其他人所指出的,这将是一个nvarchar(max)列。publicclassStringColumnLengthConvention:IPropertyConvention,IPropertyConvent

c# - 覆盖长文本字符串的流利 NHibernate nvarchar(MAX) 而不是 nvarchar(255)

当你在fluentNHibernate中设置一个字符串值时,它总是将DB值设置为Nvarchar(255),我需要存储相当多的基于用户输入的长字符串,而255是不切实际的。补充一下,这是自动映射器的一个问题,因为我正在使用流畅的NHibernate来构建数据库。 最佳答案 添加此约定会将字符串属性的默认长度设置为10000。正如其他人所指出的,这将是一个nvarchar(max)列。publicclassStringColumnLengthConvention:IPropertyConvention,IPropertyConvent

c# - nHibernate,不存在具有给定标识符的行

我有一个沿着这条线的映射。现在数据库中mdm_field表中的field_id有时会有一个相关key_field表中不存在的值,所以基本上是破坏了参照完整性。因此,当我加载实体时,出现错误“不存在具有给定标识符的行”。我如何配置映射以适应这种情况,使其不会在这种情况下死亡。 最佳答案 好的,我找到了答案。添加not-found="ignore"属性KeyField: 关于c#-nHibernate,不存在具有给定标识符的行,我们在StackOverflow上找到一个类似的问题:

c# - nHibernate,不存在具有给定标识符的行

我有一个沿着这条线的映射。现在数据库中mdm_field表中的field_id有时会有一个相关key_field表中不存在的值,所以基本上是破坏了参照完整性。因此,当我加载实体时,出现错误“不存在具有给定标识符的行”。我如何配置映射以适应这种情况,使其不会在这种情况下死亡。 最佳答案 好的,我找到了答案。添加not-found="ignore"属性KeyField: 关于c#-nHibernate,不存在具有给定标识符的行,我们在StackOverflow上找到一个类似的问题:

c# - NHibernate.映射异常 : No persister for: XYZ

现在,在你说之前:我做了谷歌和我的hbm.xml文件是一个嵌入式资源。这是我调用的代码:ISessionsession=GetCurrentSession();varreturnObject=session.Get(Id);这是我的类(class)映射文件:以前有人遇到过这个问题吗?这是完整的错误信息:MappingException:Nopersisterfor:HQData.Objects.SubCategory]NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(StringentityName,BooleanthrowIf

c# - NHibernate.映射异常 : No persister for: XYZ

现在,在你说之前:我做了谷歌和我的hbm.xml文件是一个嵌入式资源。这是我调用的代码:ISessionsession=GetCurrentSession();varreturnObject=session.Get(Id);这是我的类(class)映射文件:以前有人遇到过这个问题吗?这是完整的错误信息:MappingException:Nopersisterfor:HQData.Objects.SubCategory]NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(StringentityName,BooleanthrowIf

entity-framework - NHibernate 的三级缓存

我们的项目使用EntityFramework并有2种类型的缓存(内存中,Redis),没有任何缓存提供程序。由于lackofsecond-levelcachesupportinEF我们自己实现了。所以我们的内存缓存是一组简单的键值对,其中键是缓存的Id,值是缓存的对象。我们也实现了类似的缓存来使用Redis。对于查询,我们查看内存缓存列表,如果不存在,我们查看Redis,如果不存在,我们查询数据库。因为EntityFramework实体引用了上下文,我们不能在缓存中使用DbContext的实体,我们需要映射它。所以我们需要创建很多DTO。我知道缓存是cross-cuttingconce