Code First 可以自動(dòng)根據(jù)Model 映射來(lái)創(chuàng)建數(shù)據(jù)庫(kù),這點(diǎn)非常方便。 但是按照上一節(jié)的方式創(chuàng)建的表,會(huì)發(fā)現(xiàn),所有字符串列都是nvarchar(max),就是說(shuō)每個(gè)model的屬性映射的表列都是采用CodeFist 默認(rèn)的設(shè)置進(jìn)行創(chuàng)建。 這當(dāng)然不科學(xué),CodeFirst 提供了數(shù)據(jù)注釋?zhuān)―ata Annotation) 的方式來(lái)標(biāo)記每個(gè)模型的屬性與表之間的映射。
成都創(chuàng)新互聯(lián)長(zhǎng)期為數(shù)千家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏(yíng)平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為友好企業(yè)提供專(zhuān)業(yè)的做網(wǎng)站、網(wǎng)站制作,友好網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。Convention for key | [Key] | 標(biāo)記為主鍵,默認(rèn)是把類(lèi)名+ID 的屬性標(biāo)記為主鍵 |
Convention for string properties | [maxLength(N)] [minLength(N)] [Required] | 字符大長(zhǎng)度,映射到數(shù)據(jù)庫(kù) 字符最小長(zhǎng)度,CodeFirst 中檢查,不映射到數(shù)據(jù)庫(kù) 必填 (字符串都映射為nvarchar(n),默認(rèn)設(shè)置長(zhǎng)度映射為n=max) |
Convention for Byte Array | Column(TypeName="Image") | 把字節(jié)型數(shù)據(jù)映射為Image 類(lèi)型,默認(rèn)映射為varbinary(max) |
Convention for Booleans | sqlserver映射為bit 類(lèi)型 | |
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")]//存儲(chǔ)表名Customer,默認(rèn)是類(lèi)名
public class Customer
{
public Customer() {
this.Orders = new List<Order>();
}
[MaxLength(50)]
public string CustomerID { get; set; }
[Required] //必填
[MaxLength(50)] //大長(zhǎng)度50個(gè)漢字
public string Name { get; set; }
public decimal Balance { get; set; }
/// <summary>
/// 客戶(hù)與訂單是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)模型被修改后,此時(shí)如果直接運(yùn)行代碼,Code First 會(huì)拋出一個(gè)異常,說(shuō) 要?jiǎng)?chuàng)建的OrderBD 已經(jīng)存在。 默認(rèn)配置下CodeFisrt 是不會(huì)自動(dòng)修改的。
所以,需要添加一個(gè)初始化配置,在main函數(shù)代碼開(kāi)始的時(shí)候,讓Code First 去檢測(cè)Model 是否發(fā)生更改,如果更改,就刪掉原數(shù)據(jù)庫(kù),然后重新創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。 此種方式更新數(shù)據(jù)庫(kù),必須要保證數(shù)據(jù)庫(kù)在其他地方為被使用,否則刪除數(shù)據(jù)庫(kù)時(shí)將不會(huì)成功。
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能自動(dòng)維護(hù)model的更改,必須添加Persist Security Info=true 項(xiàng),表示保持賬號(hào)密碼-->
</connectionStrings>
</configuration>
2 在main 函數(shù)中添加 using System.Data.Entity; 引用。 (此處代碼與第一小節(jié)有點(diǎn)變化,更改過(guò)了,不過(guò)應(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ù)庫(kù)變動(dòng)初始化方法一:每次檢查數(shù)據(jù)庫(kù)上下文,如果模型Model發(fā)生變化,就刪除現(xiàn)有數(shù)據(jù)庫(kù),重新創(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ā)生變化。
網(wǎng)頁(yè)名稱(chēng):ADO.NETEntityFramework-CodeFisrt(二)-創(chuàng)新互聯(lián)
本文鏈接:http://m.rwnh.cn/article20/cedhco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、用戶(hù)體驗(yàn)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站改版、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容