日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ADO.NET Entity Framework -Code Fisrt (二)

發(fā)布時間:2025/3/21 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADO.NET Entity Framework -Code Fisrt (二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

  • Convention for key : 主鍵映射
  • Convention for string properties? :字符串屬性映射
  • Convention for Byte Array? : 字節(jié)數(shù)據(jù)映射
  • Convention for Booleans :? 布爾類型映射
  • Convention for One-to-Many ReleationShips : 一對多映射
    Convention for key[Key]標(biāo)記為主鍵,默認(rèn)是把類名+ID 的屬性標(biāo)記為主鍵
    Convention for string properties[maxLength(N)]
    [minLength(N)]

    [Required]
    字符最大長度,映射到數(shù)據(jù)庫
    字符最小長度,CodeFirst 中檢查,不映射到數(shù)據(jù)庫
    必填
    (字符串都映射為nvarchar(n),默認(rèn)設(shè)置長度映射為n=max)
    Convention for Byte ArrayColumn(TypeName="Image")把字節(jié)型數(shù)據(jù)映射為Image 類型,默認(rèn)映射為varbinary(max)
    Convention for Booleans?sqlserver映射為bit 類型
    Convention for One-to-Many ReleationShips?外鍵關(guān)系,映射為 表名_主鍵列
  • 1 修改Custom 的模型代碼: 添加using System.ComponentModel.DataAnnotations; 引用

    using System.ComponentModel.DataAnnotations;
    using System.Collections.Generic;
    namespace QuickStart.Model
    {
    ?? // [Table("Customer")]//存儲表名Customer,默認(rèn)是類名
    ?? 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; }
    ??? }
    }

    ?

    當(dāng)模型被修改后,此時如果直接運行代碼,Code First 會拋出一個異常,說 要創(chuàng)建的OrderBD 已經(jīng)存在。 默認(rèn)配置下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é)有點變化,更改過了,不過應(yīng)該可以看懂)。粗體代碼為修改部分

    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í)行,成功后,表結(jié)構(gòu)發(fā)生變化。

    轉(zhuǎn)載于:https://www.cnblogs.com/iampkm/archive/2012/12/27/2835809.html

    總結(jié)

    以上是生活随笔為你收集整理的ADO.NET Entity Framework -Code Fisrt (二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。