ADO.NETEntityFramework-CodeFisrt(二)-創(chuàng)新互聯(lián)

Code First 可以自動根據(jù)Model 映射來創(chuàng)建數(shù)據(jù)庫,這點非常方便。 但是按照上一節(jié)的方式創(chuàng)建的表,會發(fā)現(xiàn),所有字符串列都是nvarchar(max),就是說每個model的屬性映射的表列都是采用CodeFist 默認的設置進行創(chuàng)建。 這當然不科學,CodeFirst 提供了數(shù)據(jù)注釋(Data Annotation) 的方式來標記每個模型的屬性與表之間的映射。

成都創(chuàng)新互聯(lián)長期為數(shù)千家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為友好企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站制作,友好網(wǎng)站改版等技術服務。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
    1. Convention for key : 主鍵映射
    2. Convention for string properties :字符串屬性映射
    3. Convention for Byte Array : 字節(jié)數(shù)據(jù)映射
    4. Convention for Booleans : 布爾類型映射
    5. Convention for One-to-Many ReleationShips : 一對多映射
Convention for key[Key]標記為主鍵,默認是把類名+ID 的屬性標記為主鍵
Convention for string properties[maxLength(N)]
[minLength(N)]

[Required]
字符大長度,映射到數(shù)據(jù)庫
字符最小長度,CodeFirst 中檢查,不映射到數(shù)據(jù)庫
必填
(字符串都映射為nvarchar(n),默認設置長度映射為n=max)
Convention for Byte ArrayColumn(TypeName="Image")把字節(jié)型數(shù)據(jù)映射為Image 類型,默認映射為varbinary(max)
Convention for Booleanssqlserver映射為bit 類型
Convention for One-to-Many ReleationShips外鍵關系,映射為 表名_主鍵列

1 修改Custom 的模型代碼: 添加using System.ComponentModel.DataAnnotations; 引用

using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
namespace QuickStart.Model
{
  // [Table("Customer")]//存儲表名Customer,默認是類名
  public class Customer
   {
      public Customer() {
          this.Orders = new List<Order>();
      }

      [MaxLength(50)]
      public string CustomerID { get; set; }
      [Required] //必填
      [MaxLength(50)] //大長度50個漢字
      public string Name { get; set; }
      public decimal Balance { get; set; }

      /// <summary>
      /// 客戶與訂單是one or many
      /// </summary>
      public List<Order> Orders { get; set; }
   }
}

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace QuickStart.Model
{
  public class Order
   {
      public Order() {
          this.CreateTime = DateTime.Now;
          this.OrderItems = new List<OrderItem>();
      }

      public int OrderID { get; set; }
      [MaxLength(50)]
      public string Title { get; set; }
      public decimal Total { get; set; }
      public DateTime CreateTime { get; set; }

      //one or many
      public List<OrderItem> OrderItems { get; set; }
      // one or one
      public Customer Customer { get; set; }
   }
}

當模型被修改后,此時如果直接運行代碼,Code First 會拋出一個異常,說 要創(chuàng)建的OrderBD 已經(jīng)存在。 默認配置下CodeFisrt 是不會自動修改的。

所以,需要添加一個初始化配置,在main函數(shù)代碼開始的時候,讓Code First 去檢測Model 是否發(fā)生更改,如果更改,就刪掉原數(shù)據(jù)庫,然后重新創(chuàng)建一個新的數(shù)據(jù)庫。 此種方式更新數(shù)據(jù)庫,必須要保證數(shù)據(jù)庫在其他地方為被使用,否則刪除數(shù)據(jù)庫時將不會成功。

1 確保配置文件中,鏈接字符串包含保存密碼配置 Persist Security Info=true

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <connectionStrings>
   <add name="OrderDB" providerName="System.Data.SqlClient"
        connectionString="server=.;uid=sa;pwd=123456;database=OrderDB;Persist Security Info=true"/>
   <!--要CodeFirst能自動維護model的更改,必須添加Persist Security Info=true 項,表示保持賬號密碼-->
 </connectionStrings>
</configuration>

2 在main 函數(shù)中添加 using System.Data.Entity; 引用。 (此處代碼與第一小節(jié)有點變化,更改過了,不過應該可以看懂)。粗體代碼為修改部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QuickStart.Model;
using System.Data.Entity;
namespace QuickStart
{
   class Program
   {
       static void Main(string[] args)
       {
           //數(shù)據(jù)庫變動初始化方法一:每次檢查數(shù)據(jù)庫上下文,如果模型Model發(fā)生變化,就刪除現(xiàn)有數(shù)據(jù)庫,重新創(chuàng)建
          Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DBContextAPI>());

           CreateCustomer(); //創(chuàng)建顧客
           Console.ReadKey();
       }

       private static void CreateCustomer()
       {
           using (var db = new DBContextAPI())
           {
               var customer = new Customer()
               {
                   CustomerID = "20121224001",
                   Name = "張三",
                   Balance = 1000
               };
               db.Customers.Add(customer);
               int result = db.SaveChanges();
               Console.WriteLine("追加{0}條記錄成功!", result);
           }
       }
   }
}

3 執(zhí)行,成功后,表結構發(fā)生變化。

網(wǎng)頁名稱:ADO.NETEntityFramework-CodeFisrt(二)-創(chuàng)新互聯(lián)
本文鏈接:http://bm7419.com/article20/cedhco.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司用戶體驗、網(wǎng)頁設計公司、網(wǎng)站改版、品牌網(wǎng)站設計外貿(mào)網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站