您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“LINQ to SQL數據表怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“LINQ to SQL數據表怎么用”這篇文章吧。
在LINQ to SQL數據表里面都是用的DbConnection,而不是SQLConnection,這樣的話理論上可以支持所有的數據,但對于一些數據庫的支持可能不是太好。例如分頁,SQL Server 2000,SQL Server 2005,SQL Server 2008數據,使用LINQ的代碼都不一樣,而ACCESS和SQL Server 2000比較接近,就可以直接使用SQL Server 2000Provider。查了一些資料看到,理論有那個數據庫provider,就可以支持這種數據庫。也看了dbLINQ 0.8支持不同數據庫的源碼,但自己能力有限不能寫一個ACCESS的,還是用官方的吧。下邊說一下方法。
其實他不太麻煩,只是改一下,*.designer.cs文件里的代碼。因為ACCESS 不支持dbo,而LINQ to SQL數據表前面都有dbo.的前綴, [Table(Name="dbo.wjk3")],將dbo.去掉,不然的話,會提示你找不到dbo數據庫,這點上,自己走了不少彎路。在public partial class DDataContext: System.Data.LINQ.DataContext上邊加上, [Provider(typeof(System.Data.LINQ.SQLClient.SQL Server 2000Provider))]設定為SQL Server 2000Provider,不然的話 LINQ 里面的first 不能使用,另外分頁也不能使用,因為他默認的是SQL Server 2008Provider。
這一點很重要,到現在為止,基本上解決LINQ to ACCESS的使用,但還有一點問題,從數據庫讀取一條記錄,修改后使用SubmitChanges()更新,提示錯誤,不能修改,錯誤內容:找不到行或行已更改。這一點可以使用一些自定義方法來實現更新,使用ExecuteCommand()直接執行更新SQL語句來實現。感覺LINQ to SQL數據表的跟蹤,如果不適用SubmitChanges()更新的話,跟蹤也每太大的意義,實現跟蹤可能會降低系能,另外添加,刪除也依賴跟蹤,如果不使用跟蹤的話,還要擴展添加,刪除的方法。
public partial class dbgame
{
public IQueryable<TEntity> Find<TEntity>(TEntity obj) where TEntity : class
{
//獲得所有property的信息
PropertyInfo[] properties = obj.GetType().
GetProperties(BindingFlags.Public | BindingFlags.Instance);//構造初始的query
IQueryable<TEntity> query = this.GetTable<TEntity>().AsQueryable<TEntity> ();
//遍歷每個property
foreach (PropertyInfo p in properties)
{
if (p != null)
{
Type t = p.PropertyType;
//加入object,Binary,和XDocument,支持sql_variant,imager 和xml等的影射。
if (t.IsValueType || t == typeof(string) || t == typeof(System.Byte[])
|| t == typeof(object) || t == typeof(System.Xml.Linq.XDocument)
|| t == typeof(System.Data.Linq.Binary))
{
//如果不為null才算做條件
if (p.GetValue(obj, null) != null)
{
if (((ColumnAttribute)(p.GetCustomAttributes(typeof(ColumnAttribute),
true)[0])).IsPrimaryKey && Convert.ToInt32(p.GetValue(obj, null)) == 0){
}
以上是“LINQ to SQL數據表怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。