【问题标题】:Quick CRUD access for simple SQL schema简单 SQL 模式的快速 CRUD 访问
【发布时间】:2015-03-26 23:18:34
【问题描述】:

我在数据访问方面有点落后,需要指出正确的方向。我目前只有一个 SQL Server 数据库表,其中包含大约 35 列。我正在构建一个 WCF Web 服务来提供对它的访问,并试图找出将基于 C# 的 Web 服务链接到数据库的最快方法。

我一直在研究 Entity Framework,但它似乎很重,到目前为止我在上面找到的所有内容似乎都假设您已经对此有所了解,所以如果它是错误的路径。我并不完全赞同在应用程序中生成 SQL 的想法。我已经有一个 DataContract 类,其中包含表中每一列的属性,我只是在寻找一种自动方法来将列映射到属性,并将属性映射回列/存储过程参数。我已经编写了一些代码,使用反射将来自不同源的数据映射到此 DataContract(匹配属性名称与作为备份的附加映射字典),所以在这里做同样的工作并不多,但我想看看还有什么可用的。我要避免的是写出每个PropertyName = ColumnName.Value。对于像这样的简单案例,VS2010 .NET 4.0 中是否内置了一些轻量级的东西?像here 提到的那样通过EF 直接调用存储过程是一个不错的选择吗?它看起来有点过时了。

【问题讨论】:

  • 你可能想看看NHiberante
  • 恕我直言,Entity Framework 和 NHibernate 的教育负担大致相同。
  • @DavidTansey 这不是一个好兆头。我找不到任何关于将存储过程映射到现有 POCO 的东西(有效的)。每当我查看 Entity Framework 时,总是有一个更快的解决方案可用,这就是为什么我仍然不熟悉它。鉴于它是一个 ORM 工具,很难找到如何将 db 列映射到现有类,这让我感到非常惊讶。在我试图弄清楚如何使用 EF 的时间里,我本可以自己编写代码。所以在这一点上我会,但仍然有兴趣看看是否有更好的答案,我只是找不到。
  • 花点时间看看以下内容:msdn.microsoft.com/en-us/library/jj200620.aspx 这是一个简短的教程,用于将现有数据库自动逆向工程为实体框架的“代码优先”模型。请务必检查先决条件,尤其是Entity Framework Tools for Visual Studio。然后你可以跳到第 3 步,因为你已经有了一个数据库。完成第 3 步后,您的表应该有一个 POCO 类,并且您的存储过程也应该可以从 EF 上下文中调用——您可以决定使用哪个。这个很短很甜 - 祝你好运。

标签: c# sql-server .net-4.0 data-access


【解决方案1】:

我喜欢 Dapper,一个“微 ORM”。 SO使用它。我将它完美地用作“将列映射到属性的自动方式”,它似乎也可以“将属性返回到列/存储过程参数”,但我没有为此使用它。太棒了——我在用 Nuget 拿到它后大约 5 分钟就搞定了。我是 EF 的新手,如果没有指南,我不会推荐它。

    IEnumerable<TModel> result;
    using (MySqlConnection conn = new MySqlConnection(_mysqlConnString))
    {
        // "Query" is a Dapper extension method that stuffs the datareader into objects based on the column names
        result = conn.Query<TModel>("Select * from YourTable");
    }
    // do stuff with result

此链接指向一个完整示例,而不仅仅是我从当前项目中提取的部分。 http://www.tritac.com/bp-24-dapper-net-by-example

其他 Dapper 信息:c-sharpcorner.com/UploadFile/4d9083/... 和 liangwu.wordpress.com/2012/08/16/dapper-net-samples 谈论它。

(从评论中移出,因为这更像是一个答案而不是评论 - 我正在尝试在适当的地方完成适当的任务)。

【讨论】:

  • 谢谢!在得到您的答案之前,我最终选择了 EntityFramework,但这听起来是一个不错的选择。 EF 5 或更高版本可能是一个不错的选择,但 4.4 最终并没有引人注目。我遇到的一个问题是我无法从表中删除所有记录(通过 ExecuteSqlCommand),然后在单个数据库事务中将记录保存到表中。它只支持 TransactionScope,当实际只需要一个 SQL 事务时,这是一个非常糟糕的解决方案。在 4.4 中可以将存储过程映射到现有的 POCO,但是很笨重,我最终只使用了实体
猜你喜欢
  • 2011-01-17
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多