Entity framework EF中POCO对象的继承?

Entity framework EF中POCO对象的继承?,entity-framework,poco,Entity Framework,Poco,我正在尝试使用EF、代码优先和pocos解决以下问题: 假设我有一个必须服务于不同客户的应用程序。每个客户都有自己的数据库和模型,因此我将为每个客户创建一个模型和一个存储库项目。 问题是-我应该将所有安装的通用业务代码放在哪里?在传统的OOP中,我将拥有一个类库,其中包含一组定义基本行为的基类,例如UserBase、ArticleBase、常量、实用程序方法等。然后在特定于客户的项目中,我将从该基类继承一个类,并扩展其数据和行为,例如Client1User:User或Client1Article

我正在尝试使用EF、代码优先和pocos解决以下问题:

假设我有一个必须服务于不同客户的应用程序。每个客户都有自己的数据库和模型,因此我将为每个客户创建一个模型和一个存储库项目。 问题是-我应该将所有安装的通用业务代码放在哪里?在传统的OOP中,我将拥有一个类库,其中包含一组定义基本行为的基类,例如UserBase、ArticleBase、常量、实用程序方法等。然后在特定于客户的项目中,我将从该基类继承一个类,并扩展其数据和行为,例如Client1User:User或Client1Article:ArticleBase。 我的第一个想法是使用edmx文件创建公共类库,定义基类及其关系。使用tt模板,我生成了POCO类,并选择性地添加了一些自定义代码。 在为每个客户机创建的自定义库中,我引用了该基本库,并创建了从公共库继承的特定类或全新类。在自定义库中,我还创建了特定于客户的edmx,并使用t4模板生成POCO。 我还创建了单独的存储库项目来处理持久性和查询。 在repository类中,我有一堆DbSet类名称集属性,我应该能够查询这些属性 问题是我无法做到这一点,而且我经常遇到Metadataexception——类A不是当前模型或模型的一部分 指定的架构无效。错误:关系“xxx”不正确 已加载,因为类型“model.User”不可用。以下 信息可能有助于解决以前的错误:基本错误 类型为“ClientLibrary.Model.User”的类型为“BaseLibrary.BaseUser” 与模型基类型“model.User”不匹配

谢谢你帮我解开这个谜。或者为我指明了实现目标的不同方向


Tvrtko

我将从思考您的体系结构开始。为每个客户提供单独的模型和存储库是过分的。并使您的应用程序可配置和扩展,以支持所有客户的需求


此场景的问题是基本库和客户端库之间的类型继承。首先,您将无法在基本库中使用EDMX—您必须在每个客户端库中创建新的。您还必须决定是否要在映射中使用特定于客户端的类型或基类型。使用基类型意味着对每个实体使用继承映射。使用客户端类型可能会导致当前异常-您的基类型可能定义指向其他基类型的导航属性-如果您不在客户端库中映射基类型,则这是不可能的。

我建议将基类放在同一个库中进行测试,EF需要能够反射加载类,如果它没有加载程序集,那么这些类可能就是问题发生的地方