Используя EntityFramework, code-first (CTP5), как вы создаете базу данных? - PullRequest
1 голос
/ 15 декабря 2010

Справочная информация: У меня есть код LINQ-to-SQL, и все мои объекты - это POCO (простые старые объекты CLR), которые используют атрибуты / аннотации данных. У меня нет картографических файлов. Я перехожу на Entity Framework и хотел бы использовать «Code-First», чтобы также генерировать мою базу данных из моей доменной модели (в коде). У меня нет метаданных файлов типа .edmx, .ssdl и т. Д.

Я ищу эквивалент LINQ-to-SQL чего-то вроде этого:

DataContext context = new DataContext(connString)
context.GetTable<MyEntity>();
context.CreateDatabase();

Кто-то задавал подобный вопрос здесь Имеет ли Entity Framework эквивалент DataContext.GetTable из Linq2Sql (ObjectContext.CreateQuery ?)

поэтому мой код теперь выглядит так:

ObjectContext oContext = new ObjectContext(connectionString);
if (oContext.DatabaseExists()) oContext.DeleteDatabase();
oContext.CreateQuery<StockOrder>(typeof(StockOrder).Name);
oContext.CreateDatabase();

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что моей строкой соединения должна быть «EntityConnectionString», которая отличается (!) От моей текущей строки соединения LINQ-2-SQL, которую я использую. Я чувствую, что иду по неверному пути.

Это даже способ сделать это? Или, может быть, EF4 просто еще не поддерживает это? Надеюсь, я ошибаюсь, иначе я (как и другие) буду сильно разочарован EF4.

Спасибо Ray

1 Ответ

0 голосов
/ 15 декабря 2010

Используйте класс EntityConnectionStringBuilder для создания правильного соединения.
Код будет выглядеть следующим образом:

EntityConnectionStringBuilder escb = new EntityConnectionStringBuilder();
escb.Provider = "System.Data.SqlClient";  
escb.ProviderConnectionString = connString;  
escb.Metadata = "Model1.csdl|Model1.ssdl|Model1.msl"; //set the correct metadata path here  
connString = escb.ToString(); //Here is the correct connection string

UPD: Вот пример кода:

  class Program {  
    static void Main(string[] args) {  

      DbDatabase.DefaultConnectionFactory = new System.Data.Entity.Database.SqlConnectionFactory("Data Source=.;Integrated Security=SSPI");  
      DbDatabase.SetInitializer<StockContext>(new DropCreateDatabaseIfModelChanges<StockContext>());  
      StockContext oContext = new StockContext();  
      oContext.StockOrders.Add(new StockOrder{ StockOrderID = 2, Name = "test"});  
      oContext.SaveChanges();  
    }  
  }  

  public class StockOrder {  

    public int StockOrderID { get; set; }  
    public string Name { get; set; }  
  }  

  public class StockContext : DbContext {  

    public DbSet<StockOrder> StockOrders { get; set; }  
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...