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

时间:2015-09-03 14:07:02

标签: c# .net entity-framework dll class-library

我想将我的实体数据模型嵌入到包含数据库操作方法的类库中。 (比如MyEntityDatamodel.dll)当我将我的实体框架嵌入式类库添加到我的Windows窗体应用程序时,我能够使用它的方法(插入更新删除)。

目前我能够从dll运行方法,但问题是我必须将EntityFramework.dll和EntityFramework.SqlServer.dll添加到我的表单应用程序作为参考。否则它不起作用。我只想添加MyEntityDatamodel.dll。

我的实体datamodel类的示例代码:

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);

提前致谢。

2 个答案:

答案 0 :(得分:1)

花了几个小时后,我终于找到了解决方案。我可以在创建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"));

希望它有所帮助。

P.s。:抱歉语法不好。 :)

答案 1 :(得分:0)

有两点需要注意......

首先,直接问你的问题 - 你不能。您可以尝试一些复杂的技术,例如动态加载程序所需的程序集,但这几乎没有变化,除了您没有在项目引用中列出它们。他们仍然需要在装载机可以找到它们的地方。更重要的是必须始终与您的应用一起部署。否则它将无法工作。

其次,DbContext意味着用作工作单元设计模式,即需要在设备完成任务之后进行处理。通常,using子句是一个非常好的选择,所以考虑用这种方式包装你的代码:

using (var dbContext = new MyEntities())
{
   InsertOperations.../UpdateOperations...
}