- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 MVC3 Web 应用程序中使用 Entity Framework 4.1。我的任务是使用包含大约 200 多个表的数据库重写遗留应用程序,这些表已经包含数据,因此采用 EF 的数据库优先方法。
我知道为整个应用程序创建一个巨大的 edmx 模型是一种不好的做法,但经过数小时的研究,我无法明确前进的方向,因为我无法弄清楚如何重新-在多个模型中使用公用表。但我想将我的模型分解成更小的、易于管理的上下文。
当我在两个模型中放置一个公共(public)表(例如 Users)时,项目以以下形式抛出编译错误:
The type 'Project.Models.EntityX' already contains a definition for 'EntityX_PropertyY'
Posted by Microsoft on 9/17/2008 at 5:18 PM
This issue is by design. The work-around is to either put the models in a different folder (for C# & ASP.NET projects), or to set the custom tool namespace (for C# & VB projects).
那是在 08 年。我无法获得任何一个选项,我想知道是否有更好的方法来构建项目,以便我能够在多个模型中使用同一个表?
最佳答案
我们的团队查看了我们项目的所有这些帖子(约 600 个表格)。我在这里回答的一个重要警告是我们还没有完成这个项目,所以并不是所有的学习都已经发生。我只能提供我们目前学到的东西。
从本质上讲,你想做的事不可能以现实的方式(目前,据我所知)。
我们的要求是能够使用可视化设计器(不一定是 Visual Studio 设计器),并且不必在一堆自动生成的文件中乱搞(或创建自动破解文件的工具),因为那是在很多方面只是灾难的秘诀。
我们最终得出了两种可能的解决方案,并指出我们真正想要的是对表进行逻辑分组:
在 LLBLGen 中使用设计器(注意:不能免费用于商业用途),可以在逻辑上将表分成数据库的不同“ View ”
将表格分成基于业务的子集(即销售、报告等),重叠的表格重复使用不同的名称,并且可能在每个表格中使用一组不同的列子域名
在我们的测试阶段,我们非常喜欢 LLBLGen 的设计器;然而,代码生成选项令人眼花缭乱(绝对是由程序员为程序员编写的)并且输出还有很多不足之处(在我第一次尝试时,它生成了无法编译的代码)。如果您愿意在您的项目中投入几美元并花一些时间进行测试,我仍然建议您亲自尝试一下(有免费试用);就像我说的,设计师人很好,在网上翻看,似乎有很多成功案例。
不用说,我们选择了后一种方案。这对我们有用,因为在我们的业务模型中,当我们有一个“共享”表时,在除了一个子域模型之外的所有子域模型中,该表都是只读的,我们不担心在所有子域模型之间传播更改(即,我们只需要来自每个子域的数据的特定 View )。这对你来说可能不一样。如果您开始对基础架构进行重大更改,则会产生额外的维护开销,但由于您使用的是遗留数据库,因此情况可能并非如此。我们认为将工具保留在我们现有的开发环境中是值得的。 (注意:我们使用稍微修改过的 POCO 文本模板来生成实体类本身。如果不出意外,这部分是一个非常好的决定。)
在只有大约 200 个表的情况下,我会说尝试将它们全部放入一个模型中,即使只是作为一个实验。您肯定想要为此使用最强大的开发箱...当我们尝试使用我们的模型 (EF 4.0) 进行此操作时,我们不得不在过程中将其终止。
在我们的阅读过程中,我们确实看到了一些关于直接在 Visual Studio 设计器中支持模型“ View ”的传闻。如果存在,我们绝对会使用它。不过,事实上,我怀疑这种功能已经被搁置了。与 100 个或更少表的项目相比,200 个表的项目绝对是小众项目,后者并不真正需要这样的功能。
关于c# - 如何在多个模型中使用同一张表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6754824/
我是一名优秀的程序员,十分优秀!