我知道这个问题以前已经被问了很多次,因为我在关于模型优缺点的主题上读了不少帖子,但我仍然不能决定哪种方法适合我。我非常新于Web编程,来自SQL DB管理员/报告撰写背景。我已决定尝试构建自己的网站,可能将来会有30-40个表。
我已经看过两种方法,我更喜欢实体模型方法,因为我喜欢设计师的简洁性,也喜欢在眼前看到整个模型,它展示了总体情况的一张快照。此外,我不是一个强大的程序员,我对它生成POCO使用DbContext生成器模板的方式印象深刻,并且做好了类之间的链接。
然而,虽然我喜欢模型优先方法,但我觉得存在一些缺点,我不确定它们是否真正的缺点,还是我对模型优先方法和代码优先方法还不够了解,因为我还是很新手。
我犹豫使用模型优先方法的原因如下:
- 主要是因为我很难找到使用MVC 3的模型优先方法的教程。我发现使用DbContext的最好的教程是Julie Lerman写的,但她没有讲解Buddy类,这在使用数据注释和进行其他更改时很重要,并且不会在重新生成POCO时丢失。大多数与MVC 3相关的教程似乎都使用了代码优先方法。大多数人说这是因为教师不想专注于EF,而是更多地展示MVC,我个人认为这是因为Microsoft正在倡导代码优先方法而非其他方法:)
- 如果创建Buddy类是一个好习惯,那么为什么我找不到很多针对MVC 3显示这些类的教程呢?Buddy类是否是View Model的另一个名称?为什么我找不到任何由Microsoft显示这些buddy / view模型在MVC 3中使用的教程?
-我试图在两个表之间建立基本的一对一关系。在模型优先中,您必须将每个表的标识键设置为相同的字段,而不是在其中一个表中使用FK,这可能会在通过1到1关系链接3个或更多表时变得有些混乱。在代码优先中,解决这个问题的方法是手动使用模型构建器进行设置。我认为在MF中,您可以通过进入XML来更改关系,但我不喜欢这样做。
-需要有关代码优先问题的更多支持/帮助
我犹豫使用Code First方法的原因是:
-我是新手程序员。
-随着项目扩展,我看到跟踪表和关系会变得非常困难。
-没有模型图,我必须说我真的很喜欢这个想法。
-通过配置类将实体映射到数据库我觉得很难 :)。
-更新表将需要更改代码和数据库。在模型优先中,只需更改模型,它将自动更新数据库和代码,不过,如果您使用buddy类,则可能还需要更新这些类。
此外,现在我看到人们在某种程度上结合了代码优先和数据库优先方法,即您不让Code First生成数据库,而是手动创建数据库并使用代码优先API到EF来访问它。
我对所有的选项和优缺点感到眼花缭乱。我只想继续创建我的网站,而不必考虑采取哪种方法。有人可以根据我说的或者他们认为将来更流行的方式来给我一些见解吗?
非常感谢Dave