我想将我的实体数据模型嵌入到包含数据库操作方法的类库中。 (比如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);
提前致谢。
答案 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...
}