我希望实体框架样式拖放,绑定和运行WPF 4.5和.net 4.5的编码能力.
我对使用NHibernate犹豫不决,因为EF5非常简单,我理解Nhibernate更多的工作(虽然更快的ORM).有替代方案效果很好吗?如果可能的话,我试图避免过多的手动设置.编辑器不是一个强制性的项目,我不能证明它有很多额外的工作 – 但是如果将它的一个很好的版本放在一起,它将使我的工作在接下来的两年里变得更容易.
反对Access的所有论据我都非常清楚:) – 交换这个至少一年不是一个选择.
在搜索了StackOverflow网站后,我没有看到太多问题,但是如果我错过了一个好的问题,我会道歉!
感谢您提出的任何建议!
更新:我认为我应该稍微改进我的问题,因为我需要在代码生成中获得什么,这样我就不需要为Access数据库构建所有类了.从我所看到的,Dapper的工作是围绕效率,但不同于生成代码.来自实体框架的思维模式,我可以看到我在思考中将任务联合起来:).所以除了煮我自己 – 有没有人知道一个很好的代码生成用于Access.这个我可以嫁给Dapper :).
解决方法
虽然NH不支持Access开箱即用,但可以将NHibernate与MS Access一起使用.
从NHContrib和here需要NHibernate.JetDriver是NH配置文件的示例设置.
如果我没记错的话,NH Contrib需要根据您正在使用的NH版本进行编译,因此您可能需要下载源代码并自行编译.
作为替代方案,您可以使用众多微ORM中的一种,例如Stack Overflow自己的Dapper.
Dapper与数据库无关,因此它可以连接到包括Access在内的所有内容.从官方网站引用:
Will dapper work with my db provider?
Dapper has no DB specific implementation details,it works across all .net ado providers
including sqlite,sqlce,firebird,oracle,MysqL and sql Server
缺点是因为Dapper与DB无关,你必须自己实现一些有用的东西,比如paging.
编辑:
IMO Dapper处于“相当容易快速运行的类别”中.
看看这个:
(complete demo project here)
using System; using System.Data.OleDb; using Dapper; namespace DapperExample { class Program { static void Main(string[] args) { using (var con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb")) { var list = con.Query<Product>("select * from products"); Console.WriteLine("map to a strongly typed list:"); foreach (var item in list) { Console.WriteLine(item.ProductNumber + " : " + item.Description); } Console.WriteLine(); var list2 = con.Query("select * from products"); Console.WriteLine("map to a list of dynamic objects:"); foreach (var item in list2) { Console.WriteLine(item.ProductNumber + " : " + item.Description); } Console.ReadLine(); } } } public class Product { public string ProductNumber { get; set; } public string Description { get; set; } } }
第一个映射到强类型列表,例如结果是IEnumerable< Product>.当然它需要一个可以映射到的Product类.
第二个查询返回IEnumerable< Dynamic> (> = .NET 4.0)这意味着即时评估属性并且您不需要先定义类,但缺点是您丢失了类型安全性(和IntelliSense).我个人认为,缺少的类型安全对我来说是一个交易破坏者(我更喜欢第一种查询语法),但也许这适合你.