共享实体框架数据模型

时间:2012-08-27 13:05:01

标签: c# asp.net wpf entity-framework-4

我在我的WPF桌面应用程序中使用EntityFramework 4(NS:MyCompany.MyProduct)。

现在我想在ASP.NET中创建相同的应用程序(NS:MyCompany.MyProduct2),具有完全相同的功能......因此我需要使用与WPF应用程序已完全相同的数据库。

此外,我想在我的主要WPF项目之上创建一个新的可执行文件(因此是一个新的wpf项目),它也使用与WPF / ASP.NET-Application相同的ConnectionString来显示一些报告。

所以我发现我需要共享.edmx-Model(NS:MyCompany.MyProduct.Models。 DBModel.edmx )和已经在应用程序中持久化的ConnectionString WPF应用程序的.config或ASP.NET-App的web.config。

最佳或推荐的方法是什么?

3 个答案:

答案 0 :(得分:1)

  

最佳或推荐的方法是什么?

创建一个类库项目并将EF模型放在那里并在WPF / Web项目之间共享它。父项目未选取库项目的app.config文件,因此您必须手动更新web.config文件以添加ConnectionString部分。

此方法允许您在WPF应用和广告之间共享业务逻辑。你的网络应用。如果它们本质上是相同的应用程序但在不同的平台上,那么您应该只重新实现UI - 这是MVC模式的主要优势之一。

答案 1 :(得分:1)

在这里同意@James。不要害怕将库项目添加到您的解决方案中。因此,您将拥有一个名为MyCompany.Model的项目,其中包含您的EDMX。 (实际上,您稍后可能会发现要使用T4代从DbContext或ObjectContext中拆分模型,但那是another discussion。)

使用Visual Studio,您实际上可以将项目(您的EDMX项目)添加到多个解决方案中。但是,在编辑一个破坏另一个解决方案的解决方案时,请注意不要对EDMX项目进行更改。

尊敬地说,您可能会发现在此处使用GAC并不理想,特别是如果您的EDMX仍在不断发展。

对于连接字符串,这些是您不希望 在项目之间共享的一件事。通常,它们位于可执行项目的app.config(或web.config)中。这可能是一个难题,因为如果您使用库项目来保存EDMX,EF将自动在库项目中创建一个app.config,其中包含连接字符串。但.NET 从不使用app.config作为DLL。它的唯一原因是为您提供可以复制/粘贴到可执行文件(WPF)app.config或web.config的真实app.config中的内容。

答案 2 :(得分:0)

如果您的目标是在一台计算机上共享所有三个应用程序之间的单个.edmx dll,则完成此操作的最佳方法是对dll进行签名,然后将其添加到GAC。如果dll将保留在不同的服务器上,则不需要GAC dll,您可以在项目中引用它,并在相应的.configs中添加connectionstring条目。

GAC:http://msdn.microsoft.com/en-us/library/yf1d93sz(v=vs.100).aspx

将DLL安装到GAC:http://msdn.microsoft.com/en-us/library/dkkx7f79.aspx