2013-03-12 85 views
1

在Code-First中使用Entity Framework时,调用数据库数据时的最佳做法是什么?什么是最佳实践,实体框架模型或MVC模型?

这是我第一次在MVC中使用实体框架,并注意到它会自动在我的DataLayer中构建模型。我的MVC UI中也有基本的模型,它们允许我在视图中操作和显示数据。我目前使用工作流程层获取数据,然后将数据库模型自动映射到我的UI模型以显示数据。

这是最佳做法吗?我应该使用实体框架模型而不是我的UI模型吗?或者甚至可以干净地做?

任何关于此事的信息将不胜感激。

回答

2

由EF创建的POCO应该被用作您的模型。一般的想法是你有EF提供访问你的数据库。您可以使用LINQ和/或扩展方法查询EF,并最终获得通过在WPF中绑定它们而显示在UI上的对象或对象集合。当然,如果你使用WPF而不是旧的WinForms。我可以从经验告诉你,一旦你熟悉这些技术,这是一个非常简化的过程。这就是一个非常基本的设置如何工作。

一个更高级的方法是将模型 - 视图 - 视图模型(MVVM)和可能的存储库模式添加到混合中,在这种情况下,您可以以增加复杂性为代价更好地分离代码和表示。

我不知道你使用的MVC是什么味道,以及如何与上述混合使用,但如果你想更多地了解EF设想如何工作,你应该看看技术I已列在上面。

+0

MVVM听起来像它可能是最合适的,因为我已经有一个存储库模式,当使用Linq-To-SQL时使用。我修改了我的Generic Repository以与Entities一起工作,并且需要在UI一侧进行大量的数据操作。 – Lando 2013-03-12 17:25:06

4

真的取决于你。如果您想要为视图模型重新使用相同的EF实体,前进。就个人而言,我不喜欢。这是因为通常最终会向类中添加一些与数据中存储的内容无关的属性,并且是;我知道你可以使用NotMapped属性是这样的:

[NotMapped] 
public string MyExtraProperty { get; set; } 

,但我不喜欢。另外,你最终会在你的属性中添加[Display]和其他属性,并且在你知道它之前,你会得到一些用数据特定和UI特定属性进行装饰的东西,如果你不小心,它可能会变得混乱。

对我来说,我有以下几点:

  1. 域实体
  2. 视图模型
  3. 服务/门面/存储库

控制器调用库来获取域实体并将其转换为用于显示视图模型。

我发现这是一个更清洁的方法,但也许这只是我..最重要的是只选择一种方式,并坚持为了代码的一致性和清晰度,但任何一种方法都是可以接受的。 “无论什么浮动你的船”,因为他们说...