【发布时间】:2013-10-25 23:40:39
【问题描述】:
我正在使用 ASP.NET MVC 和实体框架开始一个新的小项目。 (SQL Server - 大约 20 个数据库表) 在过去的项目中,我使用过 Linq2SQL,但它似乎已经过时了。
我已经阅读了很多关于使用存储库模式进行 EF 的文章(优点和缺点),对我来说,没有存储库模式的代码似乎更好/更简单。
我创建了以下项目架构:
namespace MySite.Models
{
public class User
{
public Int32 ID { get; set; }
public String Email { get; set; }
public String Password { get; set; }
public String Name { get; set; }
public Int32 Gender { get; set; }
}
}
namespace MySite.DAL
{
public class Users
{
public static IEnumerable<User> GetUsers()
{
using (var context = new DatingSiteContext())
{
return context.Users.ToList();
}
}
public static User GetUserByID(int id)
{
using (var context = new DatingSiteContext())
{
return context.Users.Find(id);
}
}
}
namespace MySite.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
var users = DAL.Users.GetUsers();
return View(users);
}
}
}
- 这样使用 EF 有什么缺点? (除了缺少单位 测试支持)
- 在每次调用 DAL 时创建一个新的 DbContext 是否错误?任何性能命中?
- 还有其他推荐的使用 EF 的结构吗?例子? :)
- 您会在新项目中使用 Linq2SQL 吗?
谢谢。
编辑:
GetUsers() 和 GetUserByID() 中的代码只是一个例子,我理解从数据库返回所有记录是一种不好的做法(缺少分页或过滤器)
【问题讨论】:
-
对我来说,您的 DAL 有点像存储库,只是您添加了名称“Users”而不是“UserRepository”
-
请记住,像在
return context.Users.ToList();中那样调用ToList()会将整个数据集返回到内存中,如果有很多用户,这可能会影响性能。 -
仅供参考,如果 Linq2Sql 适合您,请继续使用它。它不会消失,只是没有获得任何新功能。对于一个小项目,你应该没问题。此外,EF dbcontexts 的生命周期很短,如果您在长时间的情况下使用它们可能会遇到问题,所以是的.. 每次使用时都要创建一个新的。
标签: c# asp.net asp.net-mvc entity-framework linq-to-sql