如何在类库中嵌入实体框架

本文关键字:实体 框架 类库 | 更新日期: 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"));

希望有帮助。

注。对不起,我语法不好。:)