Tag: nhibernate

从NHibernate配置文件生成数据库

是否可以从NHibernate配置文件生成数据库表和c#类? 之后,是否可以非破坏性地更改配置文件并更新表和配置文件? 你推荐使用任何工具吗? (最好免费…)

你如何在Nhibernate中进行版本控制?

我无法相信让某人向我展示一个简单的工作示例是如此困难。 它让我相信每个人只能说他们知道如何去做,但实际上他们不会。 我将post简化为我想要的例子。 也许这篇文章很长,吓跑了人们。 为了得到这个赏金,我正在寻找一个可以在VS 2010中复制并运行的工作示例。 这个例子需要做什么。 显示我的域中的数据类型应该是mssql 2008中的时间戳版本 显示nhibernate自动抛出“StaleObjectException” 向我展示这3个场景的工作示例 情景1 用户A进入该站点并编辑Row1。 用户B来(注意他可以看到Row1)并点击编辑Row1,在用户A完成之前,UserB应该被拒绝编辑该行。 场景2 用户A进入该站点并编辑Row1。 用户B出现30分钟后点击编辑Row1。 用户B应该能够编辑此行并保存。 这是因为用户A花了太长时间来编辑行并失去了编辑权。 场景3 用户A回来了。 他点击了更新行按钮,他应该受到StaleObjectException的欢迎。 我正在使用asp.net mvc和流利的nhibernate。 寻找在这些中完成的例子。 我尝试了什么 我试图建立自己的但我不能让它抛出StaleObjectException也不能让版本号增加。 我累了打开2个单独的浏览器并加载了索引页面。 两个浏览器都显示相同的版本号。 public class Default1Controller : Controller { // // GET: /Default1/ public ActionResult Index() { var sessionFactory = CreateSessionFactory(); using (var session = sessionFactory.OpenSession()) { using (var […]

这里的每个人都跳上了ORM乐队的旅行车吗?

Microsoft Linq to SQL,Entity Framework(EF)和nHibernate等都提议将ORMS作为下一代数据映射技术,并声称它们轻量级,快速且简单。 例如刚刚在VS杂志上发表的这篇文章: http://visualstudiomagazine.com/features/article.aspx?editorialsid=2583 谁都对在项目中实施这些技术感到兴奋? 这些技术的创新在哪里使它们比以前的产品更加优秀?

无状态NHibernate会话的插入很慢

我正在努力改进NHibernate Insert性能已经有几天了。 我在许多post(例如这篇文章)中读到无状态会话可以插入每秒1000~2000条记录….但是它可以插入1243条记录的最佳时间对我来说超过9秒: var sessionFactory = new NHibernateConfiguration().CreateSessionFactory(); using (IStatelessSession statelessSession = sessionFactory.OpenStatelessSession()) { statelessSession.SetBatchSize(adjustmentValues.Count); foreach (var adj in adjustmentValues) statelessSession.Insert(adj); } class级 : public partial class AdjustmentValue : PersistentObject, IFinancialValue { public virtual double Amount { get; set; } public virtual bool HasManualValue { get; set; } public virtual bool HasScaleValue { get; set; […]

C#Lambda表达式和NHibernate

我是NHibernate这个伟大世界的新手。 我使用的是2.0.1.GA版。 这是我的问题。 我有一个带有Manufacturer(nvarchar(50))和一个主键ID(int) 。 我的.NET类是: public class Car { public virtual int ID { get; set; } public virtual string Manufacturer { get; set; } } 现在,如果我想要检索梅赛德斯制造的所有汽车,我必须输入: using (var session = OpenSession()) { var cars = session .CreateCriteria(typeof(Car)) .Add(Restrictions.Like(“Manufacturer”, “Mercedes”)) .List(); // … } 我不喜欢这样的事实,我需要将属性名称指定为字符串:(是否可能有更多的重构友好(这只是一个建议)? var ms = session .CreateCriteria() .Add(c => c.Manufacturer, Restrictions.Like(“Mercedes”) […]

NHibernate SchemaUpdate

从个人经验以及我读过的所有内容来看,NHibernate的SchemaUpdate不支持删除列和表。 我想使用SchemaUpdate生成迁移DDL,但没有删除会使其变得更加困难。 你怎么解决这个问题? 在进行影响数据库的更改时,还有其他工具可以帮助您将重点放在域层上吗? 是否有任何工具像SchemaUpdate一样工作(我可以将工具指向我的实体和数据库的当前版本,并让它生成更改脚本)?

使用扩展方法定义的查询进行unit testing

在我的项目中,我使用以下方法从数据库中查询数据: 使用可返回任何类型且不绑定到一种类型的通用存储库,即IRepository.Get而不是IRepository.Get 。 NHibernates ISession就是这样一个存储库的一个例子。 使用具有特定T IQueryable上的扩展方法来封装重复查询,例如 public static IQueryable ByInvoiceType(this IQueryable q, InvoiceType invoiceType) { return q.Where(x => x.InvoiceType == invoiceType); } 用法如下: var result = session.Query().ByInvoiceType(InvoiceType.NormalInvoice); 现在假设我有一个我要测试的公共方法使用此查询。 我想测试三种可能的情况: 查询返回0个发票 查询返回1张发票 查询返回多个发票 我现在的问题是:要嘲笑什么? 我不能模拟ByInvoiceType因为它是一个扩展方法,或者我可以吗? 我出于同样的原因甚至无法模拟Query 。

在NHibernate中,使用Disjunction可以得到双重结果

我正在尝试使用DetachedCriteria进行选择,我想在运行时添加OR分隔的几个条件。 如果我使用: Restrictions.Or( cond1, Restrictions.Or(cond2, Restrictions.Or(cond3, cond4)) ) 我得到了我想要的结果。 但如果我像这样使用Disjunction: var disjunction = Restrictions.Disjunction(); disjunction.Add(cond1); disjunction.Add(cond2); disjunction.Add(cond3); disjunction.Add(cond4); 我有cond1和cond2的实体对他们来说是真的,在结果我得到它们两次(在列表结果中相同的实体被返回两次)。 我不想使用QueryOver,因为我正在尝试使用QueryOver来完成一些难以实现的事情(我正在尝试做的最终结果是从filter的json获取sql查询)。 什么导致分离返回双打? 有没有办法在最后添加DISTINCT? 我做错了,我不应该在同一张桌子上使用析取不同的条件吗? 更新: 对于DISTINCT部分: criteria.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer()); 要么 Projections.Distinct(Projections.Id()) 真正的解决方案如RadimKöhler所述 – 正确使用子查询。

LINQ group by date – 包括空日,不使用join

使用C#,NHibernate,NHibernate到LINQ。 使用NHibernate到LINQ,我没有JOINfunction。 我也不能使用QueryOver。 我有一个LINQ查询,计算潜在客户和销售额。 此表仅在新的销售线索或销售完成时创建,因此有些日子没有插入行。 执行以下查询有效 var query3 = query2.AsEnumerable() .Where(x => x.Created = fromDate.Value) .GroupBy(x => x.Created.Date) .Select(g => new ReferrerChart { Date = g.Key.Date, LeadsCount = g.Count(x => !x.IsSale), SalesCount = g.Count(x => x.IsSale) }); 但有些日期不在那里(日期有0个线索和销售)。 如何包含这些日期并让他们设置LeadsCount = 0和SalesCount = 0而不使用join? 编辑: 最终结果有效: var selectedFromDate = fromDate.Value; var selectedToDate = toDate.Value; var selectedDates […]

流畅的NHibernate – ProjectionList – ICriteria返回空值

我是NHibernate的新手,但我已经google了一下,并没有找到任何帮助解决这个问题。 我希望你们能! ;)我正在更改属性和方法的名称,因为此代码是公司的属性,但基本上这是我需要一些帮助。 我有以下情况: 我的域名实体: public class Structure { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual Person Manager { get; set; } //I need to fill here. //and others } 我的地图类: public class MapStructure : ClassMap { public MapStructure() { Table(“TB_Structure”); Id(x => x.Id).Column(“Id”).GeneratedBy.Identity(); […]