我们正在使用.net C# 4.0,VS 2010,EF 4.1和遗留代码进行项目开发。
我正在处理一个Win Form项目,决定开始使用Entity Framework 4.1来访问MS SQL数据库。代码库相当老,我们有一个现有的数据层,使用数据适配器。这些数据适配器在各个地方都被使用(在Web应用程序和Win Form应用程序中)。我的计划是逐步用EF替换旧的数据库访问代码,并消除UI层与数据层之间的紧密耦合。
所以我的想法是将EF与遗留数据访问层更多地结合起来,并逐步用EF替换遗留数据层,使用更现代的方法。因此,现在我们需要同时使用EF和遗留的数据库访问代码。
到目前为止,我已经添加了一个包含edmx文件和上下文的项目。edmx是使用数据库优先方法生成的。我还添加了另一个项目,其中包含POCO类(使用ADO.NET POCO Entity Generator)。我基本上遵循了Julia Lerman在她的书“Programming Entity Framework”中的方法,如何拆分模型和生成的POCO类。数据库模型已经设置了多年,不改变表和关系、触发器、存储过程等不是一个选项,所以我基本上被困在了当前的数据库模型中。
我已经了解了存储库模式和工作单元,并且我喜欢这些模式,但是当我需要同时处理EF和遗留的数据库访问代码时,我很难实现它们。特别是当我没有时间用纯EF实现替换所有遗留的数据库访问代码时。在理想情况下,我会从头开始采取全新的数据模型,但这不是一个选项。
这里是否应该使用存储库和工作单元模式?为了在业务层中使用POCO类,有时我需要同时使用EF和遗留的数据库代码来填充我的POCO类。换句话说,我有时可以使用EF检索我需要的部分数据,然后使用旧的数据库访问层检索其余的数据,然后将数据映射到我的POCO类。当我想要更新某些数据时,我需要从POCO类中选择数据,并使用遗留数据访问代码将数据存储在数据库中。因此,当我想要在UI中显示数据时,我需要将从遗留数据访问层检索到的数据映射到我的POCO类,反之亦然,当我想要将数据保存到数据库时。
更复杂的是,我们在表中存储一些在运行时之前不知道名称的数据(请不要问我为什么:-))。因此,在旧的数据库访问层中,我们必须根据其他表中的信息动态创建SQL语句,其中插入表和列名称。
我发现POCO类之间的关系有点过于数据库中心化。换句话说,我觉得我需要一个更简化的领域模型来使用。也许我应该创建一个符合要求的领域模型,然后使用POCO类作为“DAO”来填充领域模型类?
如果这是正确的方法,您将如何使用存储库模式和工作单元模式来实现?
我正在处理一个Win Form项目,决定开始使用Entity Framework 4.1来访问MS SQL数据库。代码库相当老,我们有一个现有的数据层,使用数据适配器。这些数据适配器在各个地方都被使用(在Web应用程序和Win Form应用程序中)。我的计划是逐步用EF替换旧的数据库访问代码,并消除UI层与数据层之间的紧密耦合。
所以我的想法是将EF与遗留数据访问层更多地结合起来,并逐步用EF替换遗留数据层,使用更现代的方法。因此,现在我们需要同时使用EF和遗留的数据库访问代码。
到目前为止,我已经添加了一个包含edmx文件和上下文的项目。edmx是使用数据库优先方法生成的。我还添加了另一个项目,其中包含POCO类(使用ADO.NET POCO Entity Generator)。我基本上遵循了Julia Lerman在她的书“Programming Entity Framework”中的方法,如何拆分模型和生成的POCO类。数据库模型已经设置了多年,不改变表和关系、触发器、存储过程等不是一个选项,所以我基本上被困在了当前的数据库模型中。
我已经了解了存储库模式和工作单元,并且我喜欢这些模式,但是当我需要同时处理EF和遗留的数据库访问代码时,我很难实现它们。特别是当我没有时间用纯EF实现替换所有遗留的数据库访问代码时。在理想情况下,我会从头开始采取全新的数据模型,但这不是一个选项。
这里是否应该使用存储库和工作单元模式?为了在业务层中使用POCO类,有时我需要同时使用EF和遗留的数据库代码来填充我的POCO类。换句话说,我有时可以使用EF检索我需要的部分数据,然后使用旧的数据库访问层检索其余的数据,然后将数据映射到我的POCO类。当我想要更新某些数据时,我需要从POCO类中选择数据,并使用遗留数据访问代码将数据存储在数据库中。因此,当我想要在UI中显示数据时,我需要将从遗留数据访问层检索到的数据映射到我的POCO类,反之亦然,当我想要将数据保存到数据库时。
更复杂的是,我们在表中存储一些在运行时之前不知道名称的数据(请不要问我为什么:-))。因此,在旧的数据库访问层中,我们必须根据其他表中的信息动态创建SQL语句,其中插入表和列名称。
我发现POCO类之间的关系有点过于数据库中心化。换句话说,我觉得我需要一个更简化的领域模型来使用。也许我应该创建一个符合要求的领域模型,然后使用POCO类作为“DAO”来填充领域模型类?
如果这是正确的方法,您将如何使用存储库模式和工作单元模式来实现?