我目前被分配到一个项目,他们的遗留系统以一种可怕的方式设计,而且过于关注数据库设计。我试图组合一个新的设计,让客户可以一点一点地迁移遗留系统。
他们目前使用的是EF 4.1,但不是代码优先的方法,实体描述/映射位于edmx文件中。他们每次都会进行逆向工程,以扩展模型(首先在数据库中进行更改,然后通过自定义工具将这些更改向上反映到模型层)。
我想知道的是,如果有人同时使用了edmx和代码优先映射类的方法。还有需要了解的缺点吗?
发布于 2011-12-06 16:11:18
只有当每种方法都有单独的上下文类型时,才能同时使用EDMX和代码映射(不能在单个上下文类型中混合使用方法)。这可能是最大的缺点,因为它会导致更复杂的代码和维护。
例如,如果您需要在两个上下文类型中都有某个实体,才能将其用于新代码和旧代码,则必须维护其映射两次。您还必须非常小心,不要复制实体类本身=您的代码首先必须使用由EDMX自定义工具生成的类,但如果他们在当前解决方案中没有使用POCOs,这将是不可能的。
另一个问题是数据库的完整性。如果您需要在单个事务中保存对这两种上下文类型的更改,则必须使用TransactionScope和distributed transaction = MSDTC (每个上下文实例将处理其自己的数据库连接)。
如果您确定要迁移整个系统,那么您可以考虑先使用代码,而不是EDMX (但请注意,代码优先映射和DbContext通常提供更有限的功能集)。如果您不确定是否能够完成整个迁移,甚至不要考虑先使用代码,因为让系统处于一半先使用代码、一半使用EDMX的状态只会让一切变得更糟、更可怕。
确定是有点理论上的,因为在软件开发中,你唯一能确定的是需求/情况会发生变化。这意味着应该非常仔细地考虑迁移。
发布于 2012-07-11 18:28:31
我也被这个问题打动了。我发现您可以在"Ado.NET Entity model “中对数据库建模并”从模型项目中生成数据库“。
但是您不能在该项目中创建存储过程,只能从服务器导入存储过程。
但是,如果您不想在服务器上创建存储过程,您可以在VS上创建另一个项目"SQl CLR数据库项目“,您可以在该项目中对存储过程和老虎进行编码,并将它们部署到服务器上。
然后,您可以再次从"Ado.NET Entity model Project“中通过"Update Model from ”导入这些存储过程。
与wise一样,您可以使用这两种方法开发服务器项目(代码优先和模型优先)
希望这篇文章能添加更多内容:)
https://stackoverflow.com/questions/8396814
复制相似问题