Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 是否有一种方法可以避免同一数据库表中有两个存储库对象?_Entity Framework_Entity Framework 4_Repository - Fatal编程技术网

Entity framework 是否有一种方法可以避免同一数据库表中有两个存储库对象?

Entity framework 是否有一种方法可以避免同一数据库表中有两个存储库对象?,entity-framework,entity-framework-4,repository,Entity Framework,Entity Framework 4,Repository,我目前在一个使用EF作为ORM选择的团队中工作 我们有一个包含许多EDMX文件的公共项目。 这样做的原因是为了保持EDMX文件小且易于管理,同时还允许它们关注数据库中的一组概念表 乙二醇 Orders.edmx Users.edmx Trades.edmx 这些都指向同一数据库上的一组不同的表。 我现在需要将用户表添加到Trade.edmx文件中。由于用户表已经在user.edmx文件中,这会在不同的名称空间下创建两次相同的用户类型,这意味着我需要2个UserRepository对象 Co

我目前在一个使用EF作为ORM选择的团队中工作

我们有一个包含许多EDMX文件的公共项目。 这样做的原因是为了保持EDMX文件小且易于管理,同时还允许它们关注数据库中的一组概念表

乙二醇

  • Orders.edmx
  • Users.edmx
  • Trades.edmx
这些都指向同一数据库上的一组不同的表。

我现在需要将用户表添加到Trade.edmx文件中。由于用户表已经在user.edmx文件中,这会在不同的名称空间下创建两次相同的用户类型,这意味着我需要2个UserRepository对象

  • Common.data.trade.User
  • Common.data.users.User
有没有一种方法可以避免同一个表有两个存储库对象


如果您正在使用POCO generator,您可以更新Trades.edmx的模板,以不生成新的
用户
类及其上下文模板,从而从
用户
命名空间使用用户类,我们将不胜感激。EF仅通过类名(省略名称空间)将POCO类与designer中的实体相匹配,因此它可以工作

缺点是在两个映射文件中都有用户实体,必须在这两个文件中更新它,否则应用程序会在运行时抛出异常


出现此问题的原因是您的体系结构—在开始时,您需要分离的模型,但知道您需要组合来自不同模型的实体。这些要求相互矛盾。要么使用分离模型,其中Trade只知道userID而不知道任何导航属性(如在另一个数据库中定义),要么将所有实体移动到单个EDMX以支持您的新需求。

我首先使用上下文扩展/实现对代码执行此操作,IE我为每个分隔上下文创建一个单独的接口,并在共享用户的单个DBContext中实现它们table@Luke:首先使用代码很容易,但使用EDMX非常复杂,其中上下文和实体通常由某个模板或代码生成器生成和维护。@LadislavMrnka我同意,使用EDMX会减少您对所见即所得的控制,这也是我更喜欢代码优先的原因之一