freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

efcodefirst學(xué)習(xí)筆記-資料下載頁

2025-07-26 02:44本頁面
  

【正文】 集的概念。我們就將People表映射到數(shù)據(jù)庫中A,B兩表 public class PersonInfo { [Key] public int PersonId { get。 set。 } public int SocialSecurityNumber { get。 set。 } public string FirstName { get。 set。 } public string LastName { get。 set。 } [Timestamp] public byte[] RowVersion { get。 set。 } public byte[] Photo { get。 set。 } public string Caption { get。 set。 } } PersonInfo().Map(m = { (A)。 (p = )。 (p = )。 (p = )。 (p = )。 }).Map(m = { (B)。 (p = )。 (p = )。 })。生成的表結(jié)構(gòu)如圖:可以看到,Code First自動的為這兩張表創(chuàng)建了主鍵和外鍵。在生成的表中,只有主表(A表)的主鍵是自增長的。注意:用Map映射的時候務(wù)必不要跳過任何屬性!不然Code First還會自動的創(chuàng)建第三張表,保存那些你遺漏的屬性。上面的PersonInfo11就是Code First自動創(chuàng)建的第三張表,因為我Map的時候遺漏了SocialSecurityNumber屬性。繼承類的映射TPH(Table Per Hierarchy)TPH:基類和派生類都映射到同一張表中,通過使用鑒別列來識別是否為子類型。這是Code First默認(rèn)規(guī)則使用的表映射方法。 public class Lodging { public int LodgingId { get。 set。 } [Required] [MaxLength(200)] [MinLength(10)] public string Name { get。 set。 } public string Owner { get。 set。 } public decimal MilesFromNearestAirport { get。 set。 } public int DestinationId { get。 set。 } } public class Resort : Lodging { public string Entertainment { get。 set。 } public string Activities { get。 set。 } }生成的數(shù)據(jù)結(jié)構(gòu)如圖:所以的屬性都映射到同一張表中,包括派生類中的Entertainment,Activities,而且還多了一列:Discriminator。EF正是通過這一列來識別數(shù)據(jù)來源。 我們可以插入數(shù)據(jù)測試一下: var lodging = new Lodging { Name = Rainy Day Motel, }。 var resort = new Resort { Name = Top Notch Resort and Spa, MilesFromNearestAirport = 30, Activities = Spa, Hiking, Skiing, Ballooning, }。 using (var context = new BreakAwayContext()) { (lodging)。 (resort)。 ()。 }可以看到EF通過Discriminator來區(qū)分Lodging與Resort。使用Fluent API定制TPH區(qū)分符字段如果你覺得默認(rèn)的鑒別列(discriminator)列名不夠直觀的話,我們可以通過Fluent API來配置discriminator列的類型和命名(Data Annotations 沒有標(biāo)記可用于定制TPH)。 Lodging().Map(m = { (Lodgings)。 (LodgingType).HasValue(Standard)。 }).MapResort(m = { (LodgingType).HasValue(Resort)。 })。Requires的參數(shù)即是你要的列名,HasValue用來指定鑒別列中的值。如果基類只有一個派生類,我們也可以將鑒別列的數(shù)據(jù)類型設(shè)置為bool值: Lodging().Map(m = { (Lodging)。 (IsResort).HasValue(false)。 }) .MapResort(m = { (IsResort).HasValue(true)。 })。TPT(Table Per Type)TPH將所有層次的類都放在了一個表里,而TPT在一個單獨(dú)的表中儲存來自基類的屬性,在派生類定義的附加屬性儲存在另一個表里,并使用外鍵與主表相連接。我們顯示的指定派生類生成的表名即可: [Table(Resorts)] public class Resort : Lodging { public string Entertainment { get。 set。 } public string Activities { get。 set。 } }我們可以看到生成了兩張表,模型中的派生類Resort映射的表中只包括它自已的兩個屬性:Entertainment、Activities,基類映射的表中也只包含它自己的屬性。并且Resorts中LodgingId即是主鍵也作為外鍵關(guān)聯(lián)到表Lodgings.TPC(Table Per Concrete Type)TPC類似TPT,基類與派生類都映射在不同的表中,不同的是派生類中還包括了基類的字段。TPC只能用Fluent API來配置。 Lodging().Map(m = { (Lodgings)。 }).MapResort(m = { (Resorts)。 ()。 })。生成的數(shù)據(jù)庫中派生類Resort映射的表中Resorts也包括了Lodging中的字段。EF Code First學(xué)習(xí)筆記:數(shù)據(jù)庫創(chuàng)建 控制數(shù)據(jù)庫的位置默認(rèn)情況下,數(shù)據(jù)庫是創(chuàng)建在localhost\SQLEXPRESS服務(wù)器上,并且默認(rèn)的數(shù)據(jù)庫名為命名空間+context類名。有幾種方法可以改變這種默認(rèn)約定。利用配置文件在配置文件中新加一個連接字符串 connectionStrings add name=BreakAwayContext providerName= connectionString=Server=.\SQLEXPRESS。Database=BreakAwayConfigFile。Trusted_Connection=true / /connectionStrings注意這里連接字符串名稱和我們的context類名相同,都為BreakAwayContext。我們修改了一下默認(rèn)的數(shù)據(jù)庫名,改為BreakAwayConfigFile。我們在新增一個連接字符串connectionStrings !add name=BreakAwayContext providerName= connectionString=Server=.\SQLEXPRESS。Database=BreakAwayConfigFile。Trusted_Connection=true / add name=My_Test providerName= connectionString=Server=.。Database=MyBreakAwayDb。Trusted_Connection=true / /connectionStrings新建的連接串名稱和context類名不同了,所以我們要在BreakAwayContext的構(gòu)造函數(shù)中指名連接串的名稱: public class BreakAwayContext : DbContext { public BreakAwayContext(): base(name=My_Test) { } } 利用DbConnectionDbContext有一個帶DbConnection重載的構(gòu)造函數(shù),說明我們也可以通過DbConnection來定位數(shù)據(jù)庫位置。我們也要先修改BreakAwayContext的構(gòu)造函數(shù): public BreakAwayContext(DbConnection connection) : base(connection, contextOwnsConnection: false) { }調(diào)用: static void Main(string[] args) { try { var lodging = new Lodging { Name = Rainy Day Motel, }。 var resort = new Resort { Name = Top Notch Resort and Spa, MilesFromNearestAirport = 30, Activities = Spa, Hiking, Skiing, Ballooning, }。 var cstr = @Server=.\SQLEXPRESS。 Database=BreakAwayDbConnectionConstructor。Trusted_Connection=true。 using (var connection = new SqlConnection(cstr)) { using (var context = new BreakAwayContext(connection)) { (lodging)。 ()。 } } } catch ( ex) { ( 保存失敗)。 } (OK)。 ()。 }使用連接工廠控制數(shù)據(jù)庫位置Code First的默認(rèn)連接工廠是SqlConnectionFactory。此連接工廠將使用SQL Client()數(shù)據(jù)庫引擎連接到數(shù)據(jù)庫。默認(rèn)的行為,將選擇在loca
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1