C# 实体框架数据上下文

C# 实体框架数据上下文,c#,entity-framework-4,linq-to-entities,C#,Entity Framework 4,Linq To Entities,我正在与一个设计搏斗,并试图找出实现它的最佳方式 我们有很多表,在当前的LinqToSql实现中,我们的DBML的大小是很多兆,非常笨拙。如果可以的话,我想避免重蹈覆辙。我们根据每个用户决定连接字符串,因此很难为不同的表组创建单独的DBML 我开始使用实体框架,虽然我们不需要代码优先的元素,但我喜欢没有所有生成的轻量级代码,也不需要可视化映射,因此我考虑为所有表生成代码文件,然后将它们作为数据库集添加到DataContext中 这让我想到了这里的最佳实践,我想问一个问题 为要使用的每组表创建Da

我正在与一个设计搏斗,并试图找出实现它的最佳方式

我们有很多表,在当前的LinqToSql实现中,我们的DBML的大小是很多兆,非常笨拙。如果可以的话,我想避免重蹈覆辙。我们根据每个用户决定连接字符串,因此很难为不同的表组创建单独的DBML

我开始使用实体框架,虽然我们不需要代码优先的元素,但我喜欢没有所有生成的轻量级代码,也不需要可视化映射,因此我考虑为所有表生成代码文件,然后将它们作为数据库集添加到DataContext中

这让我想到了这里的最佳实践,我想问一个问题


为要使用的每组表创建DataContext是否明智。也就是说,我将有一个模块,它将负责从5个表中收集数据,它不需要数据库中的每个表,只需要5个。我是否创建一个包含这5个表的DbContext。如果我将来需要更多,我可以添加它们,但它很轻

你当然可以这样做。您只需向edmx模型中添加表,就像在Linq2SQL中一样,因此只需添加所需的5个表,就可以节省其他未跟踪表的实体跟踪开销。实体框架很好地添加了Linq2SQL不具备的双向导航属性。我建议使用EF而不是Linq2SQL。

大型DBML模型本身并没有什么不好的地方,EF对性能的影响应该可以忽略不计

另一方面,在我看来,降低复杂性也适用于实体框架——如果您的代码只需要数据库中的5个表,那么一定要创建一个单独的上下文,该上下文只包含这5个表的实体。通过将完全独立的表分解到单独的上下文中,您可以清楚地表达这种分离——这些表与数据库中的其他表之间没有依赖关系,代码与不相关的实体之间也没有依赖关系——如果是这样的话,我想(可能还有其他观点),这就是解决方法


但是请记住,如果您需要在另一个上下文中使用其中一些表,那么您也必须将相应的实体放入该上下文中——很难理解相同的表存在于多个上下文中,甚至在上下文之间存在交叉依赖关系。这是应该避免的,因为它增加了复杂性。

虽然您可能对每一组表都有一个单独的上下文,但如果您的模型太大,或者您的域太分散,您可能需要考虑添加一个抽象层。这里,我的意思是拥有一个包含整个模型的单一上下文,然后按照上下文添加一些内容。这是一篇关于EF实现这一目标的不错的文章

通过这样做,您将基本上实现两个目标:抽象出您的数据层,从而释放实现顾虑;并且,允许您的开发人员只使用他们所需的实体,可能按分组


但有一件事我想说清楚。我不一定建议您使用特定的端到端架构(即DDD)。我在这里想做的是提出一些模式,让您能够灵活地犯错误(优雅地失败),同时仍能在项目中取得进展。

谢谢,这让我知道我没有浪费时间和精力