如何在类库中嵌入实体框架
本文关键字:实体 框架 类库 | 更新日期: 2023-09-27 18:11:05
我想将实体数据模型嵌入到包含数据库操作方法的类库中。(像MyEntityDatamodel.dll)简单地当我添加我的实体框架嵌入类库到我的windows窗体应用程序,我能够使用它的方法(插入更新删除)。
目前我能够从dll中运行方法,但问题是我必须将EntityFramework.dll和EntityFramework.SqlServer.dll添加到我的表单应用程序中作为参考。否则它不起作用。我只想添加MyEntityDatamodel.dll.
实体数据模型类的示例代码:
public class MyClass
{
public string classParameter { get; set; }
public void InsertMethod(MyClass parameter)
{
var dbContext = new MyEntities();
InsertOperations...
}
public void UpdateMethod(MyClass parameter)
{
var dbContext = new MyEntities();
UpdateOperations...
}
}
我如何使用;
using MyClass;
MyClass myClass = new MyClass();
myClass.classParameter = "example";
myClass.InsertMethod(myClass);
有两点需要注意…
首先,直接回答你的问题——你不能。您可以尝试一些复杂的技术,例如动态加载程序所需的程序集,但这几乎不会改变任何东西,只是您没有在项目引用中列出它们。它们还得在装填工能找到的地方。更重要的是它们必须总是和你的应用一起部署。否则它将无法工作。第二,DbContext
被用作工作单元设计模式,也就是说,它需要在单元完成它想要做的事情之后被处理。通常,using
子句是一个非常好的选择,所以考虑这样包装代码:
using (var dbContext = new MyEntities())
{
InsertOperations.../UpdateOperations...
}
在花了几个小时之后,我终于找到了一个解决方案。我可以在创建dbcontext对象之前将连接字符串注入到dbcontext中。
首先,我修改了dbcontext的构造函数方法。我为连接字符串添加了字符串参数,而不是从web.config中读取。
我改变了这个;
public partial class ExampleEntities : DbContext
{
public ExampleEntities()
: base("name=ExampleEntities")
{
}
}
,
public partial class ExampleEntities : DbContext
{
public ExampleEntities(string connStr) : base(connStr)
{
}
}
然后我添加了一个方法来生成连接字符串到我的代码;
public static string CreateConnStr(string dataSource, string instanceName, string userName, string password)
{
string connectionString = new System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder
{
Metadata = "res://*/ExampleModel.csdl|res://*/ExampleModel.ssdl|res://*/ExampleModel.msl",
Provider = "System.Data.SqlClient",
ProviderConnectionString = new System.Data.SqlClient.SqlConnectionStringBuilder
{
InitialCatalog = instanceName,
DataSource = dataSource,
IntegratedSecurity = false,
UserID = userName,
Password = password,
}.ConnectionString
}.ConnectionString;
return connectionString;
}
现在我只是使用我的dbcontext,如下所示;
var dbContext = new ExampleEntities(CreateConnStr("localhost''SQLEXPRESS","ExampleDataBase","UserName", "Password"));
希望有帮助。
注。对不起,我语法不好。:)