C# 具有大型项目的实体框架

C# 具有大型项目的实体框架,c#,entity-framework,C#,Entity Framework,我和我的团队将开始一个新项目,我们正在探索和测试一些新的(或不是很新的)技术 直到今天,我们还在使用经典的ADO和DBDataReaders,用于延迟加载的代理,在某些情况下还有DataTables 该团队由3名开发人员和一名数据库设计师组成。 我们的项目每个至少包含130个表 我们的新项目有增长的潜力,因此我们预计肯定会有100个表 在过去的两天里,我一直在阅读EF5并做一些简单的测试,但我仍然无法决定是否应该使用它 我们通常把一个大项目分成许多“模块”项目,这样我们可以在源代码控制下更快更好

我和我的团队将开始一个新项目,我们正在探索和测试一些新的(或不是很新的)技术

直到今天,我们还在使用经典的ADO和DBDataReaders,用于延迟加载的代理,在某些情况下还有DataTables

该团队由3名开发人员和一名数据库设计师组成。 我们的项目每个至少包含130个表

我们的新项目有增长的潜力,因此我们预计肯定会有100个表

在过去的两天里,我一直在阅读EF5并做一些简单的测试,但我仍然无法决定是否应该使用它

  • 我们通常把一个大项目分成许多“模块”项目,这样我们可以在源代码控制下更快更好地工作。我们是否要对整个数据库使用一个大的“edmx”
  • 由于我们有一个数据库设计器,我怀疑CodeFirst不是一个选项。。那么,将EF与数据库优先方法结合使用是否值得呢
  • 如果我们使用数据库优先的方法,EF是否足够智能,能够正确地检测所有关系,并准备好使用,而无需我进行更多配置?(我所说的额外配置是指我必须编写数据注释或验证DbContext)
  • 就我个人而言,我对使用sql设计数据库非常自信。我唯一的烦恼是当我的类列表中的实体发生更改时,我必须更新所有的选择、删除、更新和插入脚本。 EF会为我解决这个问题,但除此之外,我开始相信它会降低性能,并最终降低我的生产速度,因为我们不熟悉它
  • 你认为它值多少钱


    *除了DataAnnotations和DbContext ovveride之外,是否有人使用普通T4模板创建表(模式)?

    如果您的数据库结构成熟,EF应该是一个很好的解决方案

    如果数据库结构正在开发中,或者随着时间的推移会发生很多变化,我会断言EF可能不是最适合您的

    当存在结构更改(以及数据库层的潜在接口更改)时,需要刷新EF。您应该考虑如何在已经开发的代码库中管理数据库更改。
  • 我绝对推荐创建多个模型。您可以选择要映射的表、视图和存储过程
  • 数据库优先是绝对好的
  • 如果已设置数据库约束,则EF将识别它们。你不会绕过一些小的修改,但总的来说EF做得很好
  • 使用EF将对查询性能产生轻微影响。但在大多数情况下,这不是问题。在少数情况下,您可能会受到不可接受的性能影响,您可以在必要时通过将自己的SQL注入EF进行优化
    我想,你会很快熟悉EF的用法,因此我不认为不熟悉会成为一个长期的问题。

    我决定不使用EF。 我不会冒险在一个大项目中使用它

    使用它所需的所有工作,处理bug的可能性,额外的开销。。 与处理生成的模型或检查sql分析器中生成的查询相比,我更喜欢编写更多的sql代码并花费更多的时间进行维护

    谢谢大家的评论

    *在我再次讨论Direct ADO之前,我将介绍FluentData和Dapper。。
    我将打开一个新问题,因此如果你们想对这两个轻型ORM发表评论,我将稍后发布链接。

    关于实体框架的问题很多-对于常见问题解答中描述的问题-答案格式类型来说太多了:请限制问题的范围,如有必要,创建多个问题。实体框架是一项优秀的技术,在我看来,无论团队的决定如何,学习框架的努力都是有益的。感谢您的时间摘要,我试图尽可能快地介绍我目前的情况(困境)。我不希望对我的每个问题都进行深入分析。您使用的是哪个版本的Visual Studio?VS2012允许您为同一个.edmx使用多个图表。这只是我的经验。不要在大型项目中使用EF。它有很多bug。你可能会花很多时间来对付它们。只是一个谷歌关于:EF错误!我强烈建议您使用Fluent API查看EF 5。您仍然可以使用“DB First”,但代码和DB之间有更多的分离-不需要模型/图表。-1因此,如果您不使用EF,并且更改了DB结构,您将不需要更改任何内容?我回答了这个问题,并试图提供帮助。你似乎有答案,也许你应该提交。我没有完整的答案,但我100%肯定你提到的那一点。这没有帮助。我会提出相反的论点。如果您正在开发数据库,那么EF是上帝的恩赐,因为它可以帮助您进行数据库迁移。一旦你有了一个成熟的数据库,如果你发现需要增加性能的区域,你可能会考虑写裸露的SQL或存储过程,甚至在特定的、性能关键的部分上使用一个类似于微小的ORM的DAPPER。(2)是真实的,但对模型或POCs的定制有一定的警告。但这可能不是一个大问题,因为在OP的情况下,替代方案似乎是使用ADO.NET和代理进行延迟加载。我想补充一点,您可以在代码映射(仅代码映射是一个愚蠢的名称,IMO)和数据库优先方法中获得这两种方法。只需使用“EF Power Tools”VS add-on,并使用“反向工程代码优先”选项从现有数据库创建代码映射即可。丹尼斯感谢您的时间,我也在考虑创建多个模型,但我最终遇到了一个场景,即我在多个模型上多次使用了一些表。。我不知道这是否是预期的行为,或者我在设计中做了一些可怕的错误。@Ste