<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      冠軍

      導航

      Entity Framework 4.1 之二 : 覆蓋默認的約定

      原文名稱:Entity Framework 4.1: Override conventions (2)
      原文地址:http://vincentlauzon.wordpress.com/2011/04/06/entity-framework-4-1-override-conventions-2/
       
      看到 Entity Framework 4.1 推薦英文教程,為了幫大家看起來方便一些,簡單翻譯一下。這是一個系列,共有 8 篇,這是第 2 篇。
      1. Entity Framework 4.1 之一 : 基礎
      2. Entity Framework 4.1 之二 : 覆蓋默認的約定
      3. Entity Framework 4.1 之三 : 貪婪加載和延遲加載
      4. Entity Framework 4.1 之四:復雜類型
      5. Entity Framework 4.1 之五:多對多的關系
      6. Entity Framework 4.1 之六:樂觀并發
      7. Entity Framework 4.1 之七:繼承
      8. Entity Framework 4.1 之八:繞過 EF 查詢映射
      在這篇文章中,我將討論如何覆蓋默認的約定。
      我們已經看過了在 EF4.1 Code First 中模型與數據庫中的默認約定。當這些約定不能滿足我們的時候,我們有兩種不同的途徑來覆蓋這些約定:
      • 攔截模型的構建器,使用流暢的 API 來修改模型
      • 為我們的模型增加標簽
      在未來的版本中,我們還將有能力增加或者刪除約定,現在還沒有提供這個能力。
      對于我們基本的例子,我們使用下面所示的訂單類。
      public class Order
      {
      public int OrderID { get; set; }
      public string OrderTitle { get; set; }
      public string CustomerName { get; set; }
      public DateTime TransactionDate { get; set; }
      }

      構建器

      我們從模型的構建器開始吧。為了使用模型構建器,我們必須重寫 DbContext 的一個方法 OnModelCreating.
      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
      base.OnModelCreating(modelBuilder);
      // Map schemas
      modelBuilder.Entity<Order>().ToTable("efdemo.Order");
      }
      默認情況下,EF 將實體映射到數據庫中 dbo 架構下的同名表上,這里我將訂單映射到數據庫中 efdemo 架構下的 Order 表。
      模型構建器提供了一種流暢的 API 方式,由于方法返回同樣的對象,意味著可以使用鏈式的方法將操作連接在一起。下面是另外一個例子。
      modelBuilder.Entity<Order>().Property(x => x.OrderID)
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
      .IsRequired()
      .HasColumnName(
      "TheOrderID");
       在這里,我們對屬性 OrderID 做了三件事:
      • 標識它是標識列,自增長的列
      • 必須的列,非空
      • 映射到數據庫中的 TheOrderID
      這里,我們將涉及 EF4.1 的強大的功能:通過 Lambda 表達式,可以逐條定義屬性,而不是使用字符串來標識屬性,這有以下的優勢:
      • 有智能提示
      • 有編譯時的錯誤檢查
      • 屬性的類型是已知的,你可以在之后定義,例如,只有字符串可以有最大或最小長度。
      那么,通常我們重寫什么約定呢?看一下 Order 類,下面的情況不太符合默認約定:
      • 表必須屬于 dbo Schema
      • OrderID 是主鍵,但不是自增長的類型
      • 所有其他列是非空的
      • 字符串列的長度是 128
       我們可以通過模型構建器重寫這些約定:
      // Map schemas
      modelBuilder.Entity<Order>().ToTable("efdemo.Order");
      // Identity Column
      modelBuilder.Entity<Order>().Property(x => x.OrderID)
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
      // String columns
      modelBuilder.Entity<Order>().Property(x => x.OrderTitle)
      .IsRequired()
      .HasMaxLength(
      64);
      modelBuilder.Entity
      <Order>().Property(x => x.CustomerName)
      .IsRequired()
      .HasMaxLength(
      32);
      // Date Columns
      modelBuilder.Entity<Order>().Property(x => x.TransactionDate)
      .IsRequired();
       看起來有點冗長,但是不用修改模型,純粹的 POCO.

      使用標注

      現在,我們在看一下另外一種方式,使用標簽。
      這種方式的代碼要少得多,感覺更加自然,通過標簽來說明屬性。唯一的問題是你的類不再 POCO,雖然使用的類并沒有來自 EF,而是 System.ComponentModel.DataAnnotations , .NET 的驗證模塊。看一下例子吧。
      public class Order
      {
      public int OrderID { get; set; }

      [Required]
      [StringLength(
      32, MinimumLength = 2)]
      public string OrderTitle { get; set; }

      [Required]
      [StringLength(
      64, MinimumLength = 5)]
      public string CustomerName { get; set; }

      [Required]
      public DateTime TransactionDate { get; set; }
      }
      這里我們告訴模型構建器將 OrderTitle 映射到非空的長度為32 的 nvarchar 列,最小長度為 2沒有映射到架構中,但是將被用來驗證。
      這個例子我給出了一些業務標注,也可以加上一些技術標注。
      public class Order
      {
      [Key]
      [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
      public int OrderNumber { get; set; }

      }
      這里我們強制 OrderNumber 屬性作為主鍵,而且是一個自增長的列。
      還可以使用 OnModelCreated 或者其他的標簽來覆蓋約定,有一些限制需要注意,例如(這是我注意到的):
      • 表名不支持使用標簽進行標注
      • 最小長度在 OnModelCreated 中不支持
      • 正則表達式在 OnModelCreated 中不支持
      著比較好理解,OnModelCreated 屬于表映射,(正則或者最小長度不能在數據庫中表示),標注支持常見的驗證。
      我的原則:
      • 使用標注來豐富模型的驗證規則
      • 使用 OnModelCreated 來完成數據庫的約束(主鍵,自增長,表名,列類型等等)
      這些方式可以使你的模型更加豐富而且保持 POCO,你可以到處重用你的模型,還能從驗證規則中獲得好處。

      posted on 2011-05-06 17:12  冠軍  閱讀(23165)  評論(24)    收藏  舉報

      主站蜘蛛池模板: 精品免费看国产一区二区| 国产精品人妻久久ai换脸| 少妇高潮喷水正在播放| 欧美精品v国产精品v日韩精品 | 欧洲中文字幕国产精品| 欧美一区内射最近更新| 九九热免费精品在线视频| 国产高清自产拍av在线| 午夜成人无码福利免费视频| 午夜成人理论无码电影在线播放| 麻豆一区二区中文字幕| 门国产乱子视频观看| 亚洲国产高清aⅴ视频| 日韩丝袜欧美人妻制服| 龙海市| 国产视色精品亚洲一区二区| 无码人妻丰满熟妇啪啪网不卡| 承德县| 精品人妻系列无码天堂| 欧美亚洲高清日韩成人| 亚洲精品日韩在线观看| 四虎成人高清永久免费看| 国产精品乱码人妻一区二区三区 | 国色天香成人一区二区| 亚洲第一极品精品无码久久| 看亚洲黄色不在线网占| 浮妇高潮喷白浆视频| 日韩中文字幕av有码| 亚洲熟少妇一区二区三区| 暖暖 在线 日本 免费 中文| 男女动态无遮挡动态图| 亚洲国产精品综合久久网各| 欧美色欧美亚洲高清在线观看| 无码丰满人妻熟妇区| 国产av无码专区亚洲av软件| 亚洲色偷拍区另类无码专区| 国产美女被遭强高潮免费一视频 | 国产亚洲av日韩精品熟女| 国产日韩精品一区在线不卡| 1区2区3区4区产品不卡码网站| 人妻中文字幕精品一页|