Как внедрить Entity Framework в библиотеку классов

Я хочу встроить свою модель данных объекта в свою библиотеку классов, содержащую методы операций с базой данных. (например, MyEntityDatamodel.dll) Просто, когда я добавляю встроенную библиотеку классов Entity Framework в приложение Windows Forms, я могу использовать его методы (вставить обновление, удалить).

В настоящее время я могу запускать методы из 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);

Заранее спасибо.


person erhanzeyrek    schedule 03.09.2015    source источник
comment
Какую проблему вы пытаетесь решить, делая то, что вы объясняете?   -  person CodeCaster    schedule 03.09.2015
comment
Проще говоря, я хочу сослаться только на одну dll, которая содержит операции с базой данных с моделью данных объекта, на мой проект winforms. Эта dll должна включать в себя модель данных объекта и ее автоматически сгенерированные классы, dll библиотеки фреймворка сущностей. После этого я хочу использовать методы вставки-обновления-удаления из моего проекта winform через эту dll. Я могу использовать его сейчас, как я описал. Но проблема в том, что я должен добавить базовую DLL Entity Framework в качестве ссылки на мой проект winform. Я не хочу этого. Я хочу работать с одной dll.   -  person erhanzeyrek    schedule 03.09.2015


Ответы (2)


Потратив несколько часов на это, наконец, я нашел решение. Я могу ввести строку подключения в мой 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.: извините за корявую грамматику. :)

person erhanzeyrek    schedule 12.10.2015

Две вещи на заметку...

Во-первых, непосредственно к вашему вопросу - нельзя. Вы можете попробовать некоторые сложные методы, такие как динамическая загрузка сборок, необходимых вашей программе, но это почти ничего не меняет, за исключением того, что они не указаны в ссылках на ваш проект. Они по-прежнему должны быть где-то, где загрузчик сможет их найти. И что более важно, они всегда должны развертываться вместе с вашим приложением. В противном случае это не сработает.

Во-вторых, DbContext предназначен для использования в качестве шаблона проектирования Unit-of-Work, то есть его необходимо удалять после того, как модуль завершит все, что должен был сделать. Обычно предложение using является очень хорошим выбором для этого, поэтому подумайте о том, чтобы обернуть свой код следующим образом:

using (var dbContext = new MyEntities())
{
   InsertOperations.../UpdateOperations...
}
person Alexander Christov    schedule 03.09.2015