[英]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.