我正在开发一个大型项目,其中IIS-Application,WCF-Service和普通应用程序可以访问具有相同模型类的同一数据库。 现在我想询问是否以及如何将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
}
}
我尝试在Client-Application的App.config中插入Connection-string和配置:
注册提供者:
<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作为属性。我想在每个Project中使用该控制器类,因此我必须只编写一次数据库操作的规则。控制器类很大,包含很多方法,这里只是一小部分,你可以看到我想做的事情:
public class UserController: Controller
{
public User insertUser(User newUser)
{
entities.Users.Add(newUser);
}
//a lot of more methods here
}
Controller是一个Abstract类,它包含一个私有属性实体(Type:DB_Entities)。
所以,这个小问题的很多文本:我如何配置我的项目以便能够使用类库中的所有控制器和DB_Entity?
答案 0 :(得分:1)
您可以将实体代码放在rest api调用之后。您也可以将wcf服务与webhttp绑定端点一起使用。是的。在你的情况下,这样的东西将直接工作,否则,你将需要创建一个包含所有内容的共享dll,并在每个项目中复制和引用它。 对于共享dll,您需要为dll创建单独的c#项目。在该解决方案中,添加控制台应用程序以测试您的呼叫。在构建项目时,将在debug或release文件夹中生成dll。将EF置于WCF调用之后,请将延迟加载和代理创建设置为false。
答案 1 :(得分:0)
我不确定你是否可以用EF创建共享类库并使用针对它的迁移功能,因为DLL已经编译它无法编辑到目前为止我知道每次添加 - 迁移它创建新的类迁移文件夹。
但你可以尝试一些场景。
或
或者如果您需要多余的实体,那么您可以为DBContext创建接口并将所有实体的所有DbSet添加到它。