Tag: orm

你在哪里把SQL语句放在你的c#项目中?

我可能会负责将vb6应用程序移植到c#。 此应用程序是一个与访问数据库交互的Windows应用程序。 数据访问封装在基本业务对象中。 基本上一个表的一个类。 现有的vb6业务对象通过DAO读写DB。 我以前写了几次DAL和ORM,但它们都只针对SQL Server。 这个将需要目标访问和SQL服务器。 在以前的项目中,我会将SQL字符串放在业务对象的私有部分中,并可能将冗余的sql代码(如连接,创建命令)移动到公共基类中以减少代码。 这次,我正在考虑将SQL字符串写入.settings文件或其他键/值类型文本文件。 然后我会编写一个sql实用程序来编辑这个文件,并允许我运行并测试参数化查询。 这些查询将在业务对象中按名称引用,而不是将sql嵌入到代码中。 我知道一种标准方法是为每个目标数据库创建一个DAL,并具有要使用的DAL配置状态。 我真的不想为每个数据库创建两个DAL类。 如果我只是通过keyname引用了正确的查询并且具有正确的连接类型,那么似乎代码会更少。 那么,你们这样做吗? 你怎么会或者你有没有解决这个问题? 什么最适合你? 谢谢!

具有行为和ORM的丰富域模型

在观看了Jimmy Bogard( http://ndcoslo.oktaset.com/Agenda )的NDC12演示文稿“Crafting Wicked Domain Models”之后,我正在徘徊如何坚持这种域模型。 这是演示文稿中的示例类: public class Member { List _offers; public Member(string firstName, string lastName) { FirstName = firstName; LastName = lastName; _offers = new List(); } public string FirstName { get; set; } public string LastName { get; set; } public IEnumerable AssignedOffers { get { return _offers; } } […]

什么是NHibernate,我为什么要使用它?

可能重复: 什么是NHibernate? 我听说NHibernate的名字用了很多,但我真的不明白它是什么。 我已经阅读了维基百科的文章 ,但我不明白在我的C#应用​​程序(桌面w / WPF,web w / ASP.NET MVC)中使用NHibernate将如何: 更改代码 更容易/更快 我应该考虑在我的项目中使用NHibernate吗? 更新:感谢您认定这是一个骗局! 我没有意识到这已经被问到了。 我想我的真正问题是关于NHibernate与Linq to SQL(我在我的所有应用程序中都使用过),但这已经在这里和这里被提出过 了 。 感谢大家! 🙂

实体类的GetHashCode()的正确实现是什么?

下面是一个覆盖实体基类的Object.Equals()的示例实现,应用程序中的所有其他实体都从该实体基类派生。 所有实体类都具有属性Id,它是一个可以为null的int。 (它是实体类对应的任何表的主键。) public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) return false; if (base.Equals(obj)) return true; return Id.HasValue && ((EntityBase) obj).Id.HasValue && Id.Value == ((EntityBase) obj).Id.Value; } 鉴于Equals()的这种实现,你如何正确实现GetHashCode()?

将枚举存储为数据库中的字符串

我正在试验小巧玲珑。 我有一个具有枚举的类,值存储为数据库中的字符串。 这适用于使用GenericEnumMapper的FluentNHibernate 是否可以用Dapper做同样的事情?

ORM /持久层建议

我正在开始一个新项目,我正在寻找一个非常好的ORM或非基于SQL的持久层。 对于这个项目,我真的不关心数据是如何持久化的,只要它可以以合理的速度查询和存储,最重要的是简单的查询。 应该无缝地处理并发(前端将在另一层上,并且将有几个同时用户,但不一定处理相同的数据)并且我必须更少关注数据层(简单查询,自动懒惰)加载等)更好。 我还想不惜一切代价避免使用基于字符串的查询,因此支持LINQ或其他直观且可能强类型查询的工具会获得很大的好处。 最后使用POCO对象是我真正想做的另一件事 这是我评估的产品列表以及它们不适合的原因,只是为了让我看不到任何关于使用它们的建议: NHibernate:疯狂的xml,太多的设置,高维护复杂性和模型更改的成本,会话工厂很乱,不符合我的需求 Castle ActiveRecord:基于NHibernate,少量文档以及与NHibernate相关的一些问题仍然适用。 此外,为了获得合适的模型,它需要很多属性,以便最好手动创建模式,并且处理关系的方式是一种耻辱。 Linq To SQL:缺少POCO对象,根据MS,它不会提高太多加class时间(EF是他们所承诺的) 实体Framweork:虽然在第4版中POCO对象是可能的,但它们仍然非常hacky并迫使你做太多的手工工作来设置。 此外,v4只是一个测试版 LLBLGen Pro:很好,尤其是SelfServicing适配器,但不是POCO。 此外,LINQ提供商还不是完美的。 最后,删除一组对象是不可能通过LINQ导致混合API(其中一个远非直观)和我不喜欢。 XPO:除了直观,非常缓慢的并发问题,而不是POCO SubSonic SimpleRepository:几分钟我以为我在做梦。 当我弄清楚事情是如何处理关系时,deam结束了 我也查看了MongoDB和CouchDB,但在这些情况下,相关对象的捕获看起来像是在做正确的事情之前需要进行太多测试。 此外,它们都没有提供强类型查询。 提前感谢您的建议!

如何使用dapper映射多个列表

我有三个用户,订单和项目类存储在单个表中。 订单和项目都与用户有关系。 为了实现这一点,我有两个映射这些关系的crosstables(UserOrders,UserProjects)。 public class User { public string UserID {get;set;} public List Orders{get;set;} public List Projects {get;set;} } public class Order { public string OrderID {get;set} … } public class Project { public string ProjectID {get;set} … } 如您所见,User对象包含每个相关orderID / projectID的列表。 现在我想用Dapper查询。 我有这个解决方案,只有一个列表工作得很好。 但是如果我尝试查询第二个列表的完整用户对象,我将得到每个结果乘以第一个列表中的结果数。 因此,如果用户获得3个订单和2个项目,则订单列表将很好,项目列表将包含两个项目3次: var lookup = new Dictionary(); var multi = dbDapperFM.Query(“SELECT […]

为什么ReferenceEquals和==运算符的行为与Equals不同

我有一个实体不会覆盖任何相等的成员\运算符。 比较它们的两个代理(我从Nhibernate session得到它们)时,结果根据相等方法改变: ReferenceEquals(第一,第二) – false。 第一个==第二个 – 假 等于(第一,第二) – 是的。 这更加奇怪,因为它们都存在于同一个会话上下文中并且根据Nhibernate文档 : NHibernate只保证单个ISession内的身份(a == b,Equals()的默认实现!) 和: 该实例当前与持久性上下文相关联。 它具有持久标识(主键值),也许还有数据库中的相应行。 对于特定的持久化上下文,NHibernate保证持久标识等同于CLR标识(对象的内存中位置)。 那么为什么不是所有的等式方法都返回真实呢? 更新: 我以这种方式获得了enteties,查询ChildEntity的会话并获得带有Linq select的Parents Entities,类似于: var childs = session.Query(); var parents = childs.Select(x => x.ParentEntity).ToList();

无法在Entity Framework中使用AddRange自动生成IDENTITY

我不知道它是entity framework的设计选择还是代表我的错误方法,但每当我尝试将AddRange实体添加到DbSet时,我似乎无法获得自动生成的IDENTITY字段。 [Table(“entities”)] public class Entity { [Key] [Column(“id”)] public long Id { get; set; } [Column(“field”)] public string Field { get; set; } } var entities = new Entity[] { new Entity() { Field = “A” }, new Entity() { Field = “B” }, }; _dbContext.Entities.AddRange(entities); await _dbContext.SaveChangesAsync(); //ids are still default(long) at this […]

如何使用Linq与Castle ActiveRecord

我正在玩Castle ActiveRecord并注意到下载包含文件Castle.ActiveRecord.Linq.dll 。 我没有找到任何使用Linq和ActiveRecord的文档,只有一些 旧 博客文章 。 使用模式是什么? Castle.ActiveRecord.Linq是否Castle.ActiveRecord.Linq准备好投入生产?