[英]Create DataContext from List<T> rather than from Connection String
[英]Create DataContext from Entity Framework connection string?
我正在嘗試在我的代碼中進行此調用:
string conn = ConfigurationManager.ConnectionStrings["MyDBEntities"].ConnectionString;
DataContext context = new DataContext(conn);
Table<MyApp.Entities.Employee> myTable = context.GetTable<MyApp.Entities.Employee>();
這是我的連接字符串:
<connectionStrings>
<add name="MyDBEntities" connectionString="metadata=res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res://*/Entities.MyDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=STEVEN-PC;Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
<add name="MyDB" connectionString="Server=STEVEN-PC;Database=MyDB;Trusted_Connection=yes;" />
</connectionStrings>
創建DataContext時出錯: 不支持關鍵字:'metadata'。
如果我使用第二個連接字符串,我在嘗試獲取表時出錯 : '/'應用程序中的服務器錯誤。 “MyApp.Entities.Employee”類型未映射為表格。
我在這做錯了什么?
您正在混合和匹配LINQ-to-SQL和LINQ-to-Entites ; 兩者不兼容。
當您使用LINQ-to-Entities創建實體模型時,它會創建一個派生自ObjectContext
的對象,該對象將具有您將用於查詢基礎的IQueryable<T>
實現。 此ObjectContext
還將具有構造函數,這些構造函數采用適當的元數據將實體模型映射到數據庫; 這就是Entity Framework連接字符串需要Metadata
引用的原因。
當您嘗試使用LINQ-to-SQL時,可以將常規數據庫連接傳遞給DataContext
類(或派生類)。 DataContext
以不同於Entity Framework的方式處理對象到數據庫的映射; 它依賴於模型上的屬性來映射到表/列(分別使用TableAttribute
和ColumnAttribute
屬性)。 使用實體框架創建實體時,這些屬性不存在。
注意:您可以使用XML映射文件(與實體框架中使用的不同的類型)與LINQ-to-SQL,但它並不常用。
也就是說,最簡單的方法是選擇一個技術堆棧(LINQ-to-SQL或LINQ-to-Entities)並堅持下去。
以防萬一,這就是我所做的。 我在Web.config中沒有連接,因為我需要一個DropDownList來選擇連接。
string connDev = @"metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=""Server=MyDevServer;Database=MyDB;Integrated Security=True""";
EntityConnection ec = new EntityConnection(connDev);
MyDBContext db = new MyDBContext(ec);
var people = db.People.ToList();
如果你想使用Entity Framework,你應該使用ObjectContext,而不是DataContext,因為這是Linq-To-Sql的基類。
當您創建ADO.NET實體數據模型時,Visual Studio生成(在您從數據庫向導完成生成模型或使用設計器之后),從ObjectContext派生的類,該類具有默認連接字符串(您在向導中選擇) 。 在這里,您可以看到ADO.NET團隊的一個很好的教程如何開始使用EF。
你不應該直接使用ObjectContext,至少不是沒有手動創建元數據文件並在你的連接字符串中指向它們(從未見過直接使用的DataContext類,所以如果我錯了有人糾正我),作為向導我上面提到的創建各種映射數據 - 將SQL表/視圖/其他東西映射到實體類。
如果要提供自己的類連接,可以使用EntityConnectionStringBuilder以編程方式進行。
這是一個如何從MSDN使用EntityConnectionStringBuilder的示例
編輯:我錯誤地寫了關於DataContext,好像它是設計器生成的代碼的EF基類。 就像casperOne為Linq-To-Sql類聲明了一個基類。
改變了我的回答以反映他的評論
connectionstring已在EntityModel中定義,因此您可以嘗試使用默認連接,如下所示:
using (context = new DataContext())
{
var myTable = context.GetTable<MyApp.Entities.Employee>();
}
您還可以嘗試以下方法:
MyApp.Entities.Employee myTable = context.GetTable<MyApp.Entities.Employee>();
編輯: GetTable <T>()將返回類型T,因此上面的語法是正確的。
如果要覆蓋連接字符串,請使用web.config文件(MyDB)中的第二個連接字符串
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.