选择正确的框架

时间:2012-11-27 04:09:19

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

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

我非常感谢我对此的一个很好的建议,最终这个应用程序会增长和增长,并且希望易于维护。

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

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

3 个答案:

答案 0 :(得分:4)

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

首先使用Entity Framework代码,将数据模型定义为普通的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

答案 1 :(得分:2)

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

数据层:Ibatis.Net或NHibernate(我主要使用两者,NHibernate用于CURD,IBatis.NET用于查询,例如,调用SP,使用动态查询)。

Spring.Net:IoC助手

Asp.NET MVC:MVC框架。

Benifit是:IBatis,NHibernate和Spring.Net与Java版本非常相似,所以你可以找到很多文档。

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

答案 2 :(得分:2)

我认为这完全取决于您作为开发人员的位置以及您想要做的事情。至于成本 - 实体框架是免费的Visual Studio。流畅的NHibernate与EF非常相似,它也适用于Oracle,MySql和MSSQL以及you can get it超级简单的通过nu get。

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

我想说ORM都有其优点和缺点。