微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库 – Access 2007 – 2010可以使用哪些ORM?我是在WPF绑定到表等之后

我有一个所有网站都有的遗留数据库,它描述了许多catagory / subcatagory /子项目格式的特定内容.到目前为止,添加/编辑内容是表格中的手动工作或原始sql Windows Forms工具(我在工作中开始构建!).

我希望实体框架样式拖放,绑定和运行WPF 4.5和.net 4.5的编码能力.

我对使用NHibernate犹豫不决,因为EF5非常简单,我理解Nhibernate更多的工作(虽然更快的ORM).有替代方案效果很好吗?如果可能的话,我试图避免过多的手动设置.编辑器不是一个强制性的项目,我不能证明它有很多额外的工作 – 但是如果将它的一个很好的版本放在一起,它将使我的工作在接下来的两年里变得更容易.

反对Access的所有论据我都非常清楚:) – 交换这个至少一年不是一个选择.

搜索了StackOverflow网站后,我没有看到太多问题,但是如果我错过了一个好的问题,我会道歉!

感谢您提出的任何建议!

更新:我认为我应该稍微改进我的问题,因为我需要在代码生成中获得什么,这样我就不需要为Access数据库构建所有类了.从我所看到的,Dapper的工作是围绕效率,但不同于生成代码.来自实体框架的思维模式,我可以看到我在思考中将任务联合起来:).所以除了煮我自己 – 有没有人知道一个很好的代码生成用于Access.这个我可以嫁给Dapper :).

解决方法

您不能使用Entity Framework,因为它不适用于Access数据库.

虽然NH不支持Access开箱即用,但可以将NHibernate与MS Access一起使用.
NHContribhere需要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).我个人认为,缺少的类型安全对我来说是一个交易破坏者(我更喜欢第一种查询语法),但也许这适合你.

原文地址:https://www.jb51.cc/mssql/75643.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐