[英]Using multiple connection strings for the same DBContext in EntityFramework
[英]C# and EntityFramework: Using a DBContext in multiple projects
我正在做一个大项目,其中IIS应用程序,WCF服务和普通应用程序可以使用相同的模型类访问相同的数据库。 现在,我想问问是否以及如何将DBContext放在类库中,以便每个其他Project都可以使用该上下文。
这是我的类库中DB_Entities的一小部分:
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
}
}
我试图在客户端应用程序的App.config中插入连接字符串和配置:
注册提供者:
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql" />
<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
添加连接字符串:
<connectionStrings>
<add name="DatabaseConnection" connectionString="server=192.168.0.2;Port=5432;user id=postgres;password=postgres;database=ManagementDatabase" providerName="Npgsql" />
</connectionStrings>
其余的EF-Config:
<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'.
甚至还有一些更复杂的东西:在我的类库中,有一个控制器类,它具有DB_Entities作为属性。 我想在每个项目中使用该控制器类,因此我只需要为数据库操作编写一次规则。 控制器类很大并且包含很多方法,这里只是很小的一部分,因此您可以看到我想做的事情:
public class UserController: Controller
{
public User insertUser(User newUser)
{
entities.Users.Add(newUser);
}
//a lot of more methods here
}
Controller是一个Abstract类,其中包含一个私有属性实体(类型:DB_Entities)。
因此,有很多关于这个小问题的文字:如何配置我的项目才能使用类库中的所有Controller和DB_Entities?
您可以将实体代码放在rest api调用之后。 您也可以将wcf服务与webhttp绑定端点一起使用。 这样的事情在您的情况下将直接起作用,否则,您将需要创建一个包含所有内容的共享dll,并在每个项目中进行复制和引用。 对于共享dll,您将需要为dll创建单独的c#项目。 在该解决方案中,添加一个控制台应用程序以测试您的呼叫。 当您构建项目时,dll将在debug或release文件夹中生成。 将EF放在WCF调用之后时,请将延迟加载和代理创建设置为false。
我不确定您是否可以使用EF创建共享类库并对其使用add-migration函数,因为DLL已被编译,并且据我所知无法进行编辑,每次添加迁移时它都会创建一个新的迁移文件夹中的类。
但是您可以在这里尝试一些方案。
要么
或者,如果您需要访问实体,则可以为DBContext创建一个接口,并将其所有DbSet放入其中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.