C# 实体框架V4:“;“仅限代码”;性能注意事项

C# 实体框架V4:“;“仅限代码”;性能注意事项,c#,.net,entity-framework,C#,.net,Entity Framework,我即将开始一个新项目的工作,我想知道“只写代码”是否是正确的方式。我们也在考虑通过设计器采用另一种模型优先的方法,但更愿意在EF设计器之外设计我的域模型 我们的域名可能包含100多个实体。我已经读到大量的实体可以在某种程度上降低EF(即:创建上下文和第一次调用SaveChanges) 因为没有EDMX文件来存储元数据,所以这种方法可能会更慢吗?我在网上搜索过,但没有找到任何关于这个的信息 我知道这仍然只是在CTP中,缺少很多功能,但我现在只是在寻找输入/指导。由于.NET 4,包括EF4是Bet

我即将开始一个新项目的工作,我想知道“只写代码”是否是正确的方式。我们也在考虑通过设计器采用另一种模型优先的方法,但更愿意在EF设计器之外设计我的域模型

我们的域名可能包含100多个实体。我已经读到大量的实体可以在某种程度上降低EF(即:创建上下文和第一次调用SaveChanges)

因为没有EDMX文件来存储元数据,所以这种方法可能会更慢吗?我在网上搜索过,但没有找到任何关于这个的信息


我知道这仍然只是在CTP中,缺少很多功能,但我现在只是在寻找输入/指导。

由于.NET 4,包括EF4是Beta 1,目前您不会得到任何有用的一般答案。对于您的具体情况,为什么不进行测试

使用一个实体创建实体模型并运行一些性能测试。然后展开模型以拥有更多实体并重新运行测试。如果模型中的实体数量对性能有影响,您应该会看到性能差异


请记住不要考虑加载效果,除非您只对启动的应用程序感兴趣,否则只执行一个操作,然后关闭。

内部代码只缓存元数据,因此,一旦创建了第一个上下文,您应该会发现仅代码和EDMX方法在性能上几乎没有差别

你是对的,大量的实体会减慢EF

通常建议使用预生成视图来提高大型模型的性能。但该特性依赖于拥有一个EDMX文件,因此不必惊讶,它不仅仅适用于代码

但是,如果您发现需要预编译视图,您可以始终使用CodeOnly的ToEdmx()功能,从CodeOnly世界移到标准EDMX世界。当然,在EDMX世界中,您可以预先编译视图

然而,这不一定是我会采取的方法

我认为从可用性的角度来看,具有100个或更多IQueryable属性的上下文并不理想

因此,我可能会利用Code Only的功能,轻松创建更小的目标子域,以最小化您正在使用的应用程序部分的模型的有效大小,而不是将其从仅代码转移到预生成视图

结果将是大量快速、易于使用的ObjectContext,针对当前的任务集

这一点我认为更可取

希望这有帮助

亚历克斯

  • 这不是我想要的答案,但考虑到上下文,这可能是最好的(唯一的?)方法。认为很多实体会减慢上下文的首次使用的人是尚未找到编译时视图生成功能的人。好吧,这很有趣。但是这个功能是否只适用于“代码”?我不知道。也许亚历克斯·詹姆斯会插嘴?+1:这通常是真的。不过,我希望所有EntitySet都不是ObjectContext的自动属性(或者至少可以关闭)。理想情况下,只有聚合根是public properties.Oops。错误的链接。应该是这样的,我们特意只在代码中支持聚合根。例如,一个ObjectContext可以只包含一个ObjectSet,但它可以很容易地包含多个EntitySet。也很容易配置。我真的很喜欢拥有多个ObjectContext并能够根据我的需要配置它们的想法。似乎代码只是一条路要走,不能等待下一个版本。谢谢你们。是的,我同意。代码只支持聚合根概念。但我仍然使用v1,当我迁移到v4时,我看不到只使用代码是多么容易。我们拭目以待。对于DB-first和model-first,如果我在EntitySet上有一个“可见性”属性(public/private)就好了。