背景: 我有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感到非常失望。
由于 射线
答案 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; }
}