Questions tagged «entity-framework»

由Microsoft构建的ORM,可作为.Net Framework 3.5和更高版本的一部分使用。


3
实体框架是否适合高流量网站?
对于可能具有1000次点击/秒的公共网站,Entity Framework 4是否是一个好的解决方案? 以我的理解,EF对于大多数小型网站或Intranet网站都是可行的解决方案,但对于像流行的社区网站这样的应用来说,EF并不容易扩展(我知道SO正在使用LINQ to SQL,但是..我想提供更多示例/证明。 ..) 现在,我正处于选择纯ADO.NET方法或EF4的十字路口。您是否认为使用EF提高开发人员的生产力值得失去ADO.NET的性能和细粒度访问(使用存储过程)?高流量网站可能会遇到任何严重问题,是否使用EF? 先感谢您。

9
存储库应该返回IQueryable吗?
我已经看到很多项目的存储库返回的实例IQueryable。这允许其他过滤器,并且可以IQueryable通过其他代码对进行排序,从而转换为正在生成的不同SQL。我很好奇这种模式的来源以及它是否是一个好主意。 我最大的担心是,一个IQueryable被枚举的承诺会在一段时间后打入数据库。这意味着将向存储库外部抛出错误。这可能意味着在应用程序的不同层中引发了Entity Framework异常。 过去,我也遇到过多个活动结果集(MARS)的问题(尤其是在使用事务时),这种方法听起来更容易导致这种情况的发生。 我总是在每个LINQ表达式的末尾调用AsEnumerable或ToArray,以确保在离开存储库代码之前已命中数据库。 我想知道返回IQueryable是否可用作数据层的构建块。我已经看到一些相当奢侈的代码,其中一个存储库调用另一个存储库以构建更大的代码IQueryable。

4
具有大型系统的实体框架-如何划分模型?
我正在使用具有1000多个表,另外几百个视图和几千个存储过程的SQL Server数据库。我们希望开始在新项目中使用Entity Framework,并且正在制定策略。我最想知道的是如何最好地将表拆分为不同的模型(如果我们先编写代码,则为EDMX或DbContext)。我可以马上想到一些策略: 按模式拆分 我们将表拆分成大概十二种模式。我们可以为每个架构创建一个模型。但是,这并不是完美的,因为dbo最终仍然非常大,具有500多个表/视图。另一个问题是,某些工作单元最终将不得不进行跨越多个模型的事务,这增加了复杂性,尽管我认为EF使这一过程变得相当简单。 按意图 拆分模型不必担心架构,而是按意图拆分模型。因此,对于每个应用程序,项目,模块,屏幕,我们将具有不同的模型,具体取决于我们希望获得的粒度。我看到的问题是,在某些情况下不可避免地要使用某些表,例如User或AuditHistory。我们是将它们添加到每个模型中(违反我认为的DRY),还是将它们添加到每个项目使用的单独模型中? 完全不要分裂-一个巨大的模型 从开发的角度来看,这显然很简单,但是从我的研究和我的直觉来看,这似乎可以在设计时,编译时和运行时都表现出色。 在如此大的数据库上使用EF的最佳实践是什么?具体来说,人们在针对大量数据库对象设计模型时会使用哪些策略?是否有我没有想到的选项比上面的选项更好? 另外,这在诸如NHibernate的其他ORM中是否存在问题?如果是这样,他们是否提出了比EF更好的解决方案?


5
我应该检查数据库中是否存在某些东西并且快速失败或等待数据库异常
有两节课: public class Parent { public int Id { get; set; } public int ChildId { get; set; } } public class Child { ... } 分配给时ChildId,Parent我应该首先检查数据库中是否存在它,或者等待数据库引发异常? 例如(使用实体框架核心): 注意,即使在官方的Microsoft文档中,这类检查也已遍及整个Internet:https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/getting-started-with-ef-using- MVC /处理与实体框架在ASP.NET MVC应用程序中的并发处理#修改部门控制器,但还有其他异常处理SaveChanges 另外,请注意,此检查的主要目的是向API用户返回友好消息和已知的HTTP状态,而不是完全忽略数据库异常。并且唯一引发异常的地方是在内部SaveChanges或SaveChangesAsync调用中...因此,当您调用FindAsync或时不会有任何异常Any。因此,如果子项存在但在此之前被删除,SaveChangesAsync则将引发并发异常。 我这样做的原因是,foreign key violation异常将很难格式化以显示“找不到ID为{parent.ChildId}的孩子”。 public async Task<ActionResult<Parent>> CreateParent(Parent parent) { // is this code redundant? // NOTE: its …

5
我们应该使用实体框架吗?
我们目前有以下堆栈: VS 2005 网络表格 SQL Server 2005 IIS 6 我们正计划过渡到此: VS 2010 MVC和Web表单 SQL Server 2008 IIS 7 我的问题是,当我们在VS 2010中使用MVC时,应该使用Entity Framework(或另一个ORM),微型ORM(例如Massive)还是仅使用普通SQL? 我已经阅读了有关VS 2010的所有教程,都是针对使用Entity Framework进行数据事务而设计的,但是在可预见的未来(超过5年)中会存在吗? 如果有关系,我们客户的应用程序可以拥有10-1,000个活跃用户。

6
使用EntityFramework反对什么参数?[关闭]
我当前正在构建的应用程序一直在使用存储过程和手工制作的类模型来表示数据库对象。有人建议使用Entity Framework,由于我对项目的了解并不多,因此我正在考虑切换到该框架。我的问题是,我觉得为EF争论的人只是在告诉我事情的好处,而不是坏的事情:) 我主要关心的是: 我们希望使用DataAnnotations进行客户端验证,这听起来好像我还是必须创建客户端模型,所以我不确定EF是否会节省那么多编码时间 我们希望通过网络时使类尽可能的小,并且我读到使用EF通常会包含不需要的额外数据 我们有一个跨多个数据库的复杂数据库层,我不确定EF是否可以处理此问题。我们有一个Common数据库,其中包含诸如Users,StatusCodes,Types等内容,以及针对应用程序不同实例的主数据库的多个实例。SELECT查询可以并且将在数据库的所有实例之间进行查询,但是用户只能修改当前正在使用的数据库中的对象。他们可以在不重新加载应用程序的情况下切换数据库。 对象模式非常复杂,通常涉及很多联接 EF的参数为: 并发。我不必在检查中编写代码以查看记录是否在每次保存之前都已更新 代码生成。EF可以为我生成部分类模型和POCO,但是我并不肯定这会为我节省很多时间,因为我认为我们仍然需要创建客户端模型进行验证和一些自定义解析方法。 由于我们不需要为每个数据库对象创建CRUD存储过程,因此可以加快开发速度 我们当前的体系结构由WPF服务和WPF桌面客户端组成,该WPF服务通过参数化的存储过程处理数据库调用,从WCF服务和WPF客户端传入/传出的POCO对象,以及将POCO转换为类模型以进行验证和验证的WPF桌面客户端本身。数据绑定。 所以我的问题是,EF是否适合这样做?我没有意识到关于EF的陷阱吗?

3
实体框架代码优先在生产中是否毫无意义/无用?什么是生产的良好EF策略?
我最近一直在使用Entity Framework 4.1 Code First进行编程,并且热爱它以进行开发,但是由于只有最终计划和快速变化的功能列表,因此我会不断修改类/数据库以满足应用程序的需求。 在开发中,没有实时数据,我可以轻松地删除整个数据库,以便使用新的架构重新创建它,但是很明显,当实时运行时,这非常糟糕! 我能看到的唯一解决方案是删除元数据表并手动保持数据库同步,或者基本上删除并重新设置种子。 我个人更喜欢第一种方法,因为我认为添加列/表比重新创建和迁移数据要容易得多,但是,除非我错过了什么,否则这将完全远离Code First。 因此,问题实际上是,Code First是否只是关于最初的开发?在生产环境中管理EF的良好策略是什么?


6
通用存储库有真正的优势吗?
正在阅读一些有关为新应用创建通用存储库的优势的文章(示例)。这个主意看起来不错,因为它让我可以使用同一个存储库同时为几种不同的实体类型做几件事: IRepository repo = new EfRepository(); // Would normally pass through IOC into constructor var c1 = new Country() { Name = "United States", CountryCode = "US" }; var c2 = new Country() { Name = "Canada", CountryCode = "CA" }; var c3 = new Country() { Name = "Mexico", …

3
为什么应该在IEnumerable <T>上使用List <T>?
在我的ASP.net MVC4 Web应用程序中,我使用IEnumerables,试图遵循这一口头禅来编程接口,而不是实现。 Return IEnumerable(Of Student) 与 Return New List(Of Student) 人们告诉我使用List而不是IEnumerable,因为列表会强制执行查询,而IEumerable不会。 这真的是最佳做法吗?有没有其他选择?我对使用可以使用界面的具体对象感到奇怪。我的奇怪感觉合理吗?

2
ASP.NET MVC应用程序是否应该直接使用实体框架作为模型?
我正在Visual Studio 2013(MVC 5)中构建我的第一个MVC应用程序,但我对设置模型的最佳方法尚不清楚。 我已经从现有数据库中使用代码优先生成了一个实体框架模型。我的第一个直觉是创建一些中间类,这些中间类将成为视图使用的模型,并使这些类与实体框架类一起工作。 当我编写中介类时,我意识到我只是在重新实现EF类已经用偶尔的私有setter或从一种数据类型转换为另一种数据类型所做的许多事情。因此,这似乎是一种浪费。 是否直接将实体框架类用作MVC应用程序的模型是一般规则?还是构建这些中间课程缺少一些好处?

4
多对多(连接)表中是否需要唯一ID列?
从EF开始一些项目,但是我对联接表和键等有一些疑问。可以说我有一个应用程序表和一个权限表。应用程序具有许多权限,每个许可权可以属于多个应用程序(多对多)。 现在,“应用程序”和“权限”表很简单: Applications -------------- PK ApplicationID Name Permissions -------------- PK PermissionID Name 但是做联接表的最佳方法是什么?我有两个选择: ApplicationPermissions ----------------------- PK ApplicationPermissionID CU ApplicationID CU PermissionID 要么 ApplicationPermissions ----------------------- CPK ApplicationID CPK PermissionID PK = Primary Key CPK = Composite Primary Key CU = Composite Unique Index 您曾经被一种方法折磨过吗?严格优先吗?我发现很多“差异”都会被我的存储库模式抽象化(例如,我几乎永远不会创建一个完整的权限对象并将其添加到应用程序中,而是通过ID或唯一名称或东西),但我想我正在寻找恐怖故事,一种或另一种方式。

3
如何为复杂的对象模型实现存储库模式?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 我们的数据模型具有将近200个类别,可以分为大约十二个功能区域。使用域本来很好,但是分隔不是那么干净,我们不能更改它。 我们正在重新设计DAL以使用实体框架,而我所看到的大多数建议都建议使用存储库模式。但是,这些示例都没有真正处理复杂的对象模型。我发现一些实现建议使用每个实体存储库。对于大型,复杂的模型,这似乎是荒谬的且不可维护的。 真的有必要为每个操作创建一个UnitOfWork,并为每个实体创建一个Repository吗?我可能会参加数千堂课。我知道这是不合理的,但是我发现在复杂模型和实际业务应用程序上实现存储库,工作单元和实体框架的指导很少。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.