将Entity Framework与Code-First一起使用时,调用数据库数据的最佳做法是什么?
这是我第一次将实体框架与MVC一起使用,并注意到它会在我的DataLayer中自动构建模型。我在MVC UI中也有基本的模型,它允许我操作和显示我的视图中的数据。我目前使用我的工作流层获取数据,然后将数据库模型自动映射到我的UI模型以显示数据。
这是最佳做法吗?我应该使用实体框架模型而不是我的UI模型吗?或者甚至可以干净利落地做到这一点?
有关此事的任何信息将不胜感激。
答案 0 :(得分:4)
这取决于你。如果您想为视图模型重复使用相同的EF实体;前进。就个人而言,我不愿意。这是因为你通常最终会向类添加一堆属性,这些属性与存储在数据中的内容无关,是的;我知道您可以使用NotMapped
这样的属性:
[NotMapped]
public string MyExtraProperty { get; set; }
但我不愿意。此外,您最终会将[Display]
和其他属性添加到您的属性中,在您知道之前,您已经获得了具有特定数据和UI特定属性的内容,如果您不小心,它可能会变得混乱。 / p>
所以对我来说;我有以下内容:
控制器调用存储库以获取域实体并将其转换为视图模型以进行显示。
我发现这是一种更清洁的方法,但也许这只是我...最重要的是只选择一种方法并坚持使用它以保持代码的一致性和清晰度,但这两种方法都是可以接受的。 “无论如何漂浮你的船”正如他们所说的那样......
答案 1 :(得分:2)
EF创建的POCO应该用作您的模型。一般的想法是你有EF提供对数据库的访问。您使用LINQ和/或扩展方法查询EF,最后通过在WPF中绑定它们来显示您在UI上显示的对象或对象集合。当然,如果您使用WPF而不是旧的WinForms。我可以从经验告诉您,一旦您熟悉这些技术,这是一个非常简化的过程。这就是一个非常基本的设置如何工作。
更高级的方法是将模型 - 视图 - 视图模型(MVVM)和可能的存储库模式等架构添加到混合中,此时您可以以更高的复杂性为代价更好地分离代码和表示。
我不知道你正在使用什么样的MVC以及它如何与上述相混合,但是如果你想了解更多关于如何设想EF的工作,你应该研究一下我所使用的技术。如上所列。