C# 如果实体框架codefirst能够';不能在生产中安全使用,索引之类的东西可以';无法描述

C# 如果实体框架codefirst能够';不能在生产中安全使用,索引之类的东西可以';无法描述,c#,database,asp.net-mvc,entity-framework,linq-to-sql,C#,Database,Asp.net Mvc,Entity Framework,Linq To Sql,我刚刚开始一个非常大的网络项目,并且真的试图把每件事都做好 我目前使用的工具是 ASP.NETMVC3 实体框架4.3 Ninject 3 一切进展顺利,但我发现Entity Framework CodeFirst的一些内容有点粗略 例如,我必须使用设置成员信息作为代码优先设置的一部分。使用第三方的东西感觉有点不合适。显然,我应该是1337岁,足以“自己滚”,但我不想一开始就咬太多。运行aspnet_regsql感觉很糟糕,每次数据库更新都会丢失它。不管怎样,上面的库都可以使用,还不错。然而

我刚刚开始一个非常大的网络项目,并且真的试图把每件事都做好

我目前使用的工具是

  • ASP.NETMVC3
  • 实体框架4.3
  • Ninject 3
一切进展顺利,但我发现Entity Framework CodeFirst的一些内容有点粗略

例如,我必须使用设置成员信息作为代码优先设置的一部分。使用第三方的东西感觉有点不合适。显然,我应该是1337岁,足以“自己滚”,但我不想一开始就咬太多。运行aspnet_regsql感觉很糟糕,每次数据库更新都会丢失它。不管怎样,上面的库都可以使用,还不错。然而,脚手架似乎已经坏了

除此之外,当我在实时环境中运行时,这些东西似乎将成为实验。无论如何,我要在dev db和live db之间进行的任何模式更改都必须通过脚本手动管理,所以在这一点上,我不是首先失去了代码的意义吗

去年我一直在与谷歌应用程序引擎合作,希望代码优先基本上能以同样的方式工作?也就是说,进行更改并修改实时数据。现在我假设,由于没有在AppEngine中进行过严格的重构,它基本上不会对生产造成任何损害。因此,您永远无法使用AppEngine重命名表。它总是创建一个新表,并保留旧表。您必须手动移植数据

所以我现在在想。为什么不先去数据库呢?我已经在linq2sql工作了3年,对于先使用db非常满意。虽然TBH我的db源代码控制策略有点…缺乏。所以我希望code first能够改善这种情况,但它实际上让我觉得我应该先使用DB,并严格控制它


我非常感谢您对这种情况的任何想法,还有,这与使用Nhibinate相比如何?

您所描述的升级场景正在EF迁移中添加。该软件的上线版本已经发布,不久将成为官方支持的发布版本

退房:


查看:

这是我的看法

你不需要做出正确的选择-

您可以使用
Seed
、自定义初始值设定项(和迁移一起进行-通过迁移,您实际上可以手动更改它们,例如在那里添加索引等,尽管要小心),来“注入”原始SQL(这可以满足大多数需要)。据我所知,您可以运行自定义批处理文件表单初始值设定项(但尚未尝试,尽管我不明白为什么不尝试)。迁移是通过PS完成的,所以我猜这方面也有集成的空间

你可以用它来原型化和启动——让你的C#结构快速就位并同步——然后在以后塑造它——或者一旦修复,使用一些“使用现有的初始值设定项”,它不从代码中做任何事情,并将一切移到Db端和你的DBA

在我看来,在真正需要关闭CF并从Db开始工作之前,您可以从这个意义上说“走得很远”

对于较大的数据库或公司环境,它绝对不是合适的工具

我认为现在安全生产,但取决于你认为安全的东西,很少有…… 另外,EF/CF从一开始就已经走了很长的一段路——我从一开始就使用了它——最初它有很大的问题。最新的版本现在在各个方面都非常可靠,所以我认为它已经达到了目标

…缺点是——我用代码优先的方法(EF和其他方法)解决了一些相当复杂的场景。然而,几乎没有什么事情阻碍了我对EF的了解(在你提到的基础上)

UDF支持、视图(使用linq-就好像你不使用linq一样,一个大的“优点”已经消失了)-这应该在EF 5.0中出现(我没有检查,但这是他们承诺的)-对于更复杂的场景,你需要在SQL端进行优化(或者能够在后面执行自定义查询,然后映射回去,也就是说,在这方面更具灵活性)。因此,这是一件很有希望的事情(尽管我认为这并不完美)。(从好的方面来说,您实际上可以运行自定义查询,然后映射到您的对象-但这类工作很有效,您无法完成所有操作,因此在某种程度上受到限制)

查询和更高要求的重载场景的性能—这是我的主要问题。在EF 5.0中,这一点也会得到更好的解决—请拭目以待

话虽如此-
我最喜欢的是一个自定义或开放源代码的解决方案,比如ORM,在这个解决方案中,你可以控制更多的事情。仍然有许多提供商支持等等。从长远来看,“官方”或MS实现更可行


希望这有助于任何

,因为数据库比代码优先模型拥有更多的对象;该模型无法描述SQL server拥有的所有内容(索引、统计信息、列顺序、对象描述、计算列、存储过程、视图等)无论在EF迁移和代码优先元数据基础架构方面付出了多少努力,任何时候都可以。这就是为什么我坚信应该使用数据库工具而不是EF迁移来开发数据库。Microsoft SQL Server Data tools通过其版本控制功能、快照、localdb等非常好地完成这项工作c、 迁移还不够——使用自动化工具来完成DBA的工作总是有缺点的。你可以使用流畅的定义,但不使用索引。计算列:在模型中实现。对象描述:属性注释(列)等。我认为,如果你是