C# C和EntityFramework:在多个项目中使用DBContext

C# C和EntityFramework:在多个项目中使用DBContext,c#,entity-framework,C#,Entity Framework,我正在从事一个大型项目,其中IIS应用程序、WCF服务和普通应用程序可以使用相同的模型类访问相同的数据库。 现在我想问一下,是否以及如何能够将DBContext放在类库中,以便其他所有项目都可以使用该上下文 下面是类库中我的DB_实体的一小部分: using ManagementLibrary.Model; using System.Data.Entity; namespace ManagementLibrary.EntityFramework { public class DB_En

我正在从事一个大型项目,其中IIS应用程序、WCF服务和普通应用程序可以使用相同的模型类访问相同的数据库。 现在我想问一下,是否以及如何能够将DBContext放在类库中,以便其他所有项目都可以使用该上下文

下面是类库中我的DB_实体的一小部分:

using ManagementLibrary.Model;
using System.Data.Entity;

namespace ManagementLibrary.EntityFramework
{
    public class DB_Entities : DbContext
    {
        public DB_Entities() : base(nameOrConnectionString: "DatabaseConnection") { }

        public DbSet<User> Users{ get; set; }
        // more sets here
    }
}
甚至还有更复杂的东西:在我的类库中有一个控制器类,它将DB_实体作为属性。我希望在每个项目中使用该控制器类,因此我必须只编写一次数据库操作的规则。控制器类非常大,包含许多方法,这里只是一个非常小的部分,您可以看到我想要做什么:

public class UserController: Controller
{
    public User insertUser(User newUser)
    {
        entities.Users.Add(newUser);
    }

    //a lot of more methods here
}
控制器是一个抽象类,它包含一个私有属性实体类型:DB_entities


所以,对于这个小问题,我有很多文本:我必须如何配置我的项目才能使用类库中的所有控制器和DB_实体?

您可以将实体代码放在rest api调用后面。您也可以将wcf服务与webhttp绑定端点一起使用。是。类似的东西在您的情况下将直接工作,否则,您将需要创建一个包含所有内容的共享dll,并在每个项目中复制和引用它。
对于共享dll,您需要为dll创建单独的c项目。在该解决方案中,添加一个控制台应用程序来测试您的通话。构建项目时,dll将在调试或发布文件夹中生成。将EF置于WCF调用之后时,请将延迟加载和代理创建设置为false。

我不确定是否可以使用EF创建共享类库并对其使用添加迁移函数,因为DLL已经编译,据我所知无法编辑,每次添加迁移时,它都会在迁移文件夹中创建一个新类。 但是你可以在这里尝试一些场景

正如Amit所写,您可以尝试使用API构建另一个解决方案。然后您可以从所有项目调用该API:WEB、WCF或Mobile。 或

您可以有一个DB项目,其中包含公开其接口的公共存储库。然后,您需要构建它,并在需要连接到DB的所有项目中引用DLL。
或者,如果您需要访问实体,那么您可以为DBContext创建一个接口,并将其所有的dbset放在其中

您可以将实体代码放在rest api调用后面吗?在这种情况下,rest api调用是什么?您也可以将wcf服务与webhttp绑定端点一起使用。因此,您的意思是在IIS站点和管理应用程序有权访问的地方创建一个wcf服务?是的。类似的东西在您的情况下将直接工作,否则,您将需要创建一个包含所有内容的共享dll,并在每个项目中复制和引用它。
<connectionStrings>
    <add name="DatabaseConnection" connectionString="server=192.168.0.2;Port=5432;user id=postgres;password=postgres;database=ManagementDatabase" providerName="Npgsql" />
</connectionStrings>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v13.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
    </providers>
</entityFramework>
PM> Enable-Migrations
No context type was found in the assembly 'ConsoleTestClient'.
public class UserController: Controller
{
    public User insertUser(User newUser)
    {
        entities.Users.Add(newUser);
    }

    //a lot of more methods here
}