這篇主要講Linq to SQL基於屬性的映射。即映射數據庫,映射表,映射列,映射關系,映射存儲過程,
映射函數。然而創建這種映射有三種方法,他們分別是ORD工具,SQLMetal命令行工具,以及編寫手工代碼
創建。
咱們首先了解下手工創建屬性映射的方法,這樣你就能看懂基於工具產生的代碼了。他們的區別也就是
使用工具效率會更高些,但前提需要先設計好數據庫,這樣就可以直接通過數據庫的結構輸出你的實體類。
1、映射數據庫
映射數據庫主要通過Database屬性來指定,引用命名空間System.Data.Linq.Mapping;
具體看如下代碼:
[Database(Name = Table<LoginUser> Table<UserBaseInfo> Table<Aritcal> MyDbContext( connection) :
然後再創建數據庫連接的時候,就可以這樣寫,如果database 不設置的話,默認的數據庫名就會為MyDbContext 類名:
MyDbContext db = MyDbContext();
這樣的話,輸出的連接sql語句為:
3、映射列
映射列使用的attribute屬性為Column,參數設置比較多,具體看如下代碼:
//CanBeNull不能亂用,如果某列CanBeNull設置為true,但從數據庫中查出來的值為null的話, // AutoSync:在執行insert或者update操作之後獲取列值,默認為never;= , IsPrimaryKey = , IsDbGenerated = UserID { ; = , CanBeNull = , UpdateCheck = UserName { ; = , CanBeNull = , UpdateCheck = UserNickName { ; ; }
4、映射關系
這裡的關系是指的數據庫中一對多和一對一。主鍵基表和外鍵基表的設置也能通過實體字段的Association屬性(IsForeignKey=true)來進行關聯,從而在創建數據庫時,自動創建表之間的關系。
但要結合EntityRef<T>或 EntitySet<T> 來定義並表示一個關系
EntityRef代表一對多關系中的單一實例方,EntitySet主要代表一對多和一對一關系中的集合方,下面分別用代碼介紹
以用戶基本信息表 UserBaseInfo和用戶文章表Aritcal來作為介紹,他們是一對多的關系
1)EntityRef+Association的使用
因為EntityRef代表的是1:M關系中的1,所以它應該為Aritcal實體的成員,泛型對象為UserBaseInfo
這裡UserBaseInfo的實體和Artical實體分別為:
[Table(Name = = , IsPrimaryKey = , IsDbGenerated = UserID { ; = , CanBeNull = , UpdateCheck = UserName { ; EntitySet<Aritcal>= , OtherKey = EntitySet<Aritcal> { = ), Column(IsPrimaryKey = , CanBeNull = , DbType = ArticalID { ; ), Column(CanBeNull = , DbType = UserID { ; ), Column(DbType = , UpdateCheck = ArticalTitle { ; ), Column(DbType = , UpdateCheck = CategoryID { ; ), Column(DbType = , UpdateCheck = ModuleID { ; ), Column(DbType = , UpdateCheck = Content { ; EntityRef<UserBaseInfo> [Association(Name = , ThisKey = , OtherKey = , IsForeignKey = ,Storage = { { _UserBaseInfo.Entity =這樣Artical自動創建外鍵,生成的表結構關系為
見查詢代碼: 查詢用戶信息表中用戶ID為1的用戶信息,通過調用Articals成員,自動關聯查詢出用戶id為1的文章列表UserBaseInfo userbase = db.GetTable<UserBaseInfo>().Where(a => a.UserID == (Aritcal artical .Format(
查詢結果如下:
然後在MyDbContext類中添加如下方法[Function(Name = GetPassword([Parameter(DbType = )] userid, [Parameter(DbType = )] = = .ExecuteMethodCall(= ()result.GetParameterValue(); ()result.ReturnValue; }
調用代碼如下:
+str);
調用結果如下:
然後在vs中編寫代碼調用
[Function(Name = , IsComposable = Fun_GetPassword([Parameter(DbType = )] = .ExecuteMethodCall( ( mypwd=+mypwd);調用結果如下:
下載源碼
您的支持是我最大的動力,喜歡就點推薦吧!!!