有没有人使用实体框架与代码优先的方法与Edmx文件混合



我目前被分配到一个项目,他们的遗留系统设计得很糟糕,而且过于关注数据库设计。我试图把一个新的设计放在一起,客户可以一点一点地迁移遗留系统。

他们目前使用EF 4.1,但不是代码优先的方法,实体描述/映射位于edmx文件中。他们每次都进行逆向工程来扩展模型(首先在数据库中进行更改,然后通过自定义工具向上反映到模型层)。

我想知道的是,如果有人使用edmx和代码优先的方法与映射类。有什么缺点需要了解吗?

只有在每种方法具有单独的上下文类型时(不能在单一上下文类型中混合使用方法),才能同时使用EDMX和代码映射。这可能是最大的缺点,因为它会导致更复杂的代码和维护。

例如,如果您需要在两种上下文类型中都有一些实体,以便在新代码和遗留代码中使用它,则必须维护它的映射两次。您还必须非常小心不要复制实体类本身=您的代码首先必须使用由EDMX自定义工具生成的类,但如果他们在当前解决方案中不使用poco,这将是不可能的。

另一个问题将是数据库完整性。如果您需要在单个事务中保存对两种上下文类型的更改,则必须使用TransactionScope和分布式事务= MSDTC(每个上下文实例将处理自己的数据库连接)。

如果您确定整个系统将被迁移,您可能会考虑先使用代码而不是EDMX(但要注意,代码优先映射和DbContext通常提供更有限的特性集)。如果您不确定您是否能够完成整个迁移,甚至不要考虑先使用代码,因为让系统处于一半先使用代码,一半使用EDMX的状态只会使事情变得更糟,更可怕。

确定是有点理论上的,因为在软件开发中,你唯一可以确定的是需求/情况会发生变化。这意味着应该非常仔细地考虑迁移。

我也遇到了这个问题。我发现,您可以对数据库建模,并在"Ado"中"从模型生成数据库"。. NET实体模型项目"。

但是您不能在该项目中创建存储过程,您只能从服务器导入存储过程。

但是如果你不想在服务器上创建存储过程,你可以在VS上创建另一个项目,"SQl CLR Database project ",你可以在这个项目中编写你的存储过程和虎,并将它们部署到服务器上。

,那么您可以再次从Ado导入这些存储过程。. NET实体模型项目" by "Update model From Database".

同样,您可以使用两种方法(代码优先和模型优先)来开发服务器项目

希望这将添加更多的东西:)

相关内容

最新更新