使用EntityFramework,代码优先(CTP5),如何创建数据库?

时间:2010-12-14 23:22:43

标签: c# linq-to-sql entity-framework

背景: 我有LINQ-to-SQL代码,我的所有对象都是使用属性/数据注释的POCO(普通旧CLR对象)。我没有映射文件。我正在迁移到Entity Framework,并希望使用“Code-First”来从我的域模型(代码中)生成我的数据库。我没有.edmx,没有.ssdl等类型的元文件。

我正在寻找类似这样的LINQ-to-SQL:

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

有人在这里问了一个类似的问题 Does the Entity Framework have an equivalent of DataContext.GetTable<TEntity> from Linq2Sql (ObjectContext.CreateQuery<T>?)

所以我的代码现在看起来像这样:

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

我现在面临的问题是 - 我的连接字符串必须是“EntityConnectionString”,它与我正在使用的当前LINQ-2-SQL连接字符串不同(!)。我觉得我走错了路。

这甚至可以做到吗?或者也许EF4不支持这个呢?我希望我错了,否则,我会(像其他人一样)对EF4感到非常失望。

由于 射线

1 个答案:

答案 0 :(得分:0)

使用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:以下是Code First示例:

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