| ADO.NET DataEntity | LINQ to SQL |
using | System.Data.Objects | System.Linq |
副檔名 | .edmx | .dbml |
Class宣告 | System.Data.Objects.ObjectContext | System.Data.Linq.DataContext |
建構式 | Entity() // Entity是class名 | DataCont() //DataCont是class名 |
Entity(string connectionString) | DataCont(string connectionString) | |
Entity(EntityConnection connection) | DataCont(IDbConnection connection) | |
| DataCont(string connection, Mapping.MappingSource mappingSource) | |
| DataCont(IDbConnection connection, Mapping.MappingSource mappingSource) | |
TableClass/View | Objects.ObjectQuery | Linq.Table |
新增 Table EntitySet EntityRef | 表格名稱 變數=new 表格名稱(); <指定各欄位值> Entity.AddTo表格名稱(變數); Entity.SaveChanges(); 或者 表格名稱 變數=表格名稱.Create表格名稱(各欄位參數); Entity.AddTo表格名稱(變數); Entity.SaveChanges(); | 表格名稱 變數= new表格名稱(); <指定各欄位值> Linq.Table DataCont.SubmitChanges(); |
改 | 表格名稱.欄名=值; Entity.SaveChanges(); | 先將查詢結果轉給變數 ,再重新指定欄位值後,逕行呼叫 DataCont.SubmitChanges(); 或者 DataCont.ExecuteCommand("sql 命令"); //不會傳回物件 |
刪 | Entity.DeleteObject(ObjectEntity); Entity.SaveChanges(); | DeleteOnSubmit(o); DataCont.SubmitChanges(); |
關聯 一對多 | 表格名稱.關聯表格名稱; 或由 變數=Entity.表格名稱.Where().轉ObjectEntity之函數; // 轉ObjectEntity之函數 有: // First, Last, ElementAt……等 變數.關聯表格.Load(); 即可對 變數.關聯表格 進行操作 | (一{master}對多{client}) EntitySet<TableEntity> client = master.client; 跟操作單一Entity相同,更可由 client.master.column 直接操作master 或 直接利用「一之TableEntity.多之TableEntity」 |
關聯 多對一 | 變數.關聯表格Reference.Load(); 即可對 變數.關聯表格 進行操作 | (多{client}對一{master}) 直接利用「多之TableEntity.一之TableEntity.一之column」; |
查詢比較 | LoginUserEntities EDMabcd = new LoginUserEntities(); var p2 = from q2 in EDMabcd.aspnet_Applications select q2; foreach (var t in p2) { t.ApplicationId.ToString(); t.ApplicationName.ToString(); }
ObjectQuery myTable.First(p3 => p3.ApplicationName ==
| DataContext LINGabcd = new DataContext(); var p = from q in LINGabcd.aspnet_Applications select q; foreach (var t in p) { t.ApplicationId.ToString(); t.ApplicationName.ToString(); }
Table<aspnet_Applications> myLTable =
myLTable.First(p3 => p3.ApplicationName ==
LINGabcd.aspnet_Applications.First(p3 => p3.ApplicationName
|
用ExecuteQuery查詢 | 4.0以後才提供: Entity.ExecuteStoreQuery<string>("SELECT name
Entity.ExecuteStoreQuery<string>(“SELECT name FROM
Entity.ExecuteStoreCommand("INSERT INTO CoursesSet
| IEnumerable (@"SELECT c1.custid as CustomerID, c2.custName as ContactName FROM customer1 as c1, customer2 as c2 WHERE c1.custid = c2.custid" ); |
StoredProcedure | 1.必須先定義接收之實體型別(或引用資料表實體型別) 2.必須進行 Function Import (操作見下頁) 3.進行「實體」與「程序」對應 註: 如果不傳回值或傳回值為純量者,EF不支援,建議可於程式中採用 SqlCommand cmd = new SqlCommand("sp_name",cnnt); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@DataID",SqlDbType.VarChar, 15); cmd.Parameters["@DataID"].Value = "XXXXX"; cnnt.Open(); cmd.ExecuteNonQuery(); //不傳回 cmd.ExecuteScalar(); //傳回純量 | DataCont.預存程式名(參數值, ……); 或 DataCont. 預存程式名(參數名=參數值, ……) |
DataBind()的範例之一:
RadioButtonList1.DataSource = p2;
RadioButtonList1.DataTextField = "ApplicationName";
RadioButtonList1.DataValueField = "ApplicationId";
RadioButtonList1.DataBind();
條件式的兩種寫法:
.Where("it.AddressID = @addressId", new ObjectParameter("addressId", newAddressId));
.Where(p=>p.AddressID==newAddressId);
1.從模型瀏覽器中,使用滑鼠右鍵
2.利用實體編輯頁上,利用滑鼠右鍵
選取SotredProcedure 與對應的 Function 名稱,並指定傳回型別(只能選「實體」):
有關預存程序輸入的參數設定,請參考下一頁的圖,而回傳值則由「實體」接收:
沒有留言:
張貼留言