【问题标题】:Choosing the right framework选择正确的框架
【发布时间】:2012-11-27 04:09:18
【问题描述】:

我将构建一个应用程序,但我不确定要使用什么框架。在我工作过的地方,他们使用 Ntiers 和 codesmith,nettiers 是免费的,但不是 codesmith。我发现了实体框架,但我也读到了使用它的方法是使用一种叫做“存储库模式”的东西,但是对使用它有很多疑问。我没有很大的预算,只有我自己买不起一个昂贵的工具来自动创建我的类,更新、删除、创建功能并留下一些代码让我实现。所以我不知道该怎么走,我应该去实体框架(这是唯一一个免费的吗?),还是有其他我可以使用的东西,也许不是那么贵但可靠。

如我所料,我非常感谢您对此提出好的建议,最终此应用程序将不断发展壮大,并且希望易于维护。

PS:如果这是我的最佳选择,我会选择实体框架和存储库模式。

使用 C#、Asp.net 和 MSSQL 2008。

【问题讨论】:

  • 我想指出,我为 CodeSmith Tools 工作,我们总是愿意与客户就定价问题进行合作。只需发送电子邮件 (codesmithtools.com/contactus) 即可。我们有 EF 模板,但它们不使用存储库模式。但是,您可以自定义模板/生成的代码以非常轻松地使用通用存储库模式。还有一句老话:可以为您节省大量时间的工具非常值得黄金价格。

标签: c# asp.net sql-server entity-framework


【解决方案1】:

带有code first and automatic migrations 的实体框架是您可以使用的最简单的 ORM 之一。它很灵活,在 Microsoft 堆栈中得到很好的支持,并且代码优先,这是开发数据库的最快方法之一。

首先使用实体​​框架代码,将数据模型定义为普通的 C# 类。这将对应于 Product 表:

public Product {

   public int Id { get; set; }
   public string Name { get; set; }
}

创建数据库上下文。

public MyDbContext : DbContext {

    public DbSet<Product> Products { get; set; }
}

将连接字符串添加到 Web.config,并在包管理器控制台中运行命令:

>Enable-Migrations –EnableAutomaticMigrations
>Update-Database

您现在有了一个包含 Products 表的功能数据库。当您对类进行更改时,只需再次运行 Update-Database,它就会为您迁移架构。

添加新产品:

using (var db = new MyDbContex()
{
    Product product = new Product() { Id = 1, Name = "Tablet" };

    db.Products.Add(product);

    db.SaveChanges();
}

查询您的数据变得如此简单:

using (var db = new MyDbContex()
{
    // get product with id == 1
    Product product = db.Products.Single(p => p.Id == 1);
}

至于存储库模式,它只是一个design pattern。有很多不同的variations of the repository pattern,但它实际上是将数据存储与数据访问层分开。这使得单元测试更容易,而不必依赖于存在的外部数据库。

编辑您的评论:有几种使用 EF 和存储过程的方法。请参阅Does Entity Framework Code First support stored procedures?Using Stored Procedure to Insert Data

【讨论】:

  • 非常感谢您的洞察力,一个问题,如果我需要创建一个存储过程来给我一些特定的数据怎么办,在这种情况下如何工作?
  • 编辑了我的答案以添加有关使用存储过程的信息。
【解决方案2】:

我认为这完全取决于您作为开发人员的位置以及您想做什么。就成本而言,Visual Studio 中的 Entity Framework 是免费的。 Fluent NHibernate 与 EF 非常相似,它也适用于 Oracle、MySql 和 MSSQL 以及 you can get it 通过 nu get 超级简单。

存储库模式只是获取集合的模式。

我想说两种 ORM 各有优缺点。

【讨论】:

    【解决方案3】:

    您可以选择的另一个列表是:

    数据层:Ibatis.Net 或 NHibernate(大多数情况下我都使用了,NHibernate 用于 CURD,IBatis.NET 用于必要的查询,例如调用 SP,动态查询)。

    Spring.Net:IoC 助手

    Asp.NET MVC:MVC 框架。

    好处是:IBatis、NHibernate 和 Spring.Net 与 Java 版本非常相似,所以你可以找到很多关于它们的文档。

    我可以说的是,具有良好ORM(EF,Nhibernate或Ibatis)的3层是复杂项目的最佳实践,并且更易于维护和协作。如果您的项目非常简单,LINQ + WebForm 可以在几个小时内帮助您,您可以完全放弃 MVC。

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 2010-12-04
      • 2013-05-29
      • 2012-04-24
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多