<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一般而言,本部分中的設定適用於關聯式資料庫。安裝關聯式資料庫提供程式時,此處顯示的變為可用擴充套件方法(原因在於共用的Microsoft.EntityFrameworkCore.Relational包)。
表對映標識在資料庫中哪張表應該進行內容查詢和儲存操作。
按照約定,每個實體將設定為對映到名稱與DbSet<TEntity> 屬性(公開派生上下文中的實體)相同的表中。如果給定DbSet<TEntity>實體中不包含,則使用類名稱。
可以使用資料註釋來設定型別對映表。
[Table("blogs")] public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
你還可以指定表所屬的架構(資料庫)。
[Table("blogs", Schema = "blogging")] public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
你可以使用熟知的API來設定型別對映到的表。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .ToTable("blogs"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
你還可以指定表所屬的架構(資料庫)。
modelBuilder.Entity<Blog>().ToTable("blogs", schema: "blogging");
列對映標識在資料庫中應從哪些列資料中進行查詢和儲存。
按照約定,每個屬性將會設定為對映到與屬性具有相同名稱的列。
可以使用資料註釋來設定屬性對映到的那一列。
namespace EFModeling.DataAnnotations.Relational.Column { class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } } public class Blog { [Column("blog_id")] public int BlogId { get; set; } public string Url { get; set; } } }
您可以使用熟知的API來設定屬性對映到的列。
namespace EFModeling.FluentAPI.Relational.Column { class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Property(b => b.BlogId) .HasColumnName("blog_id"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } } }
資料型別是指屬性所對映到的列的資料庫特定型別。
按照約定,資料庫提供程式基於屬性的.NET型別選擇資料型別。它還會考慮其他後設資料,如設定的最大長度、屬性是否是主鍵的一部分等。例如,SQL Server的DateTime、nvarchar(max) 用作鍵的屬性。
您可以使用資料註釋為列指定精確的資料型別。例如,下面的程式碼將Url設定為一個非unicode字串,其最大200長度。Rating為5至2小數位。
public class Blog { public int BlogId { get; set; } [Column(TypeName = "varchar(200)")] public string Url { get; set; } [Column(TypeName = "decimal(5, 2)")] public decimal Rating { get; set; } }
你還可以使用熟知的API為列指定相同的資料型別。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>(eb => { eb.Property(b => b.Url).HasColumnType("varchar(200)"); eb.Property(b => b.Rating).HasColumnType("decimal(5, 2)"); }); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public decimal Rating { get; set; } }
為每個實體型別的鍵引入primary key(主鍵)約束。
按照約定,會將資料庫中的主鍵命名為PK_<type name>。
不能使用資料批註設定主鍵的關聯式資料庫的特定方面。
你可以使用API在資料庫中設定primary key(主鍵)約束的名稱。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .HasKey(b => b.BlogId) .HasName("PrimaryKey_BlogId"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
如果沒有為該物件顯式設定架構,則預設架構為將在其中建立物件的資料庫架構。
按照約定,資料庫提供程式將選擇最適合的預設架構。例如,Microsoft SQL Server將使用dbo架構,而且sqlite將不使用架構(因為sqlite不支援架構)。
不能使用資料批註設定預設架構。
可以使用API來指定預設架構。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("blogging"); } }
如果插入新行,但沒有為該列指定值,則列的預設值為要插入的值。
按照約定,未設定預設值。
不能使用資料批註設定預設值。
你可以使用API指定屬性的預設值。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Property(b => b.Rating) .HasDefaultValue(3); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public int Rating { get; set; } }
還可以指定用於計算預設值的SQL片段。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .Property(b => b.Created) .HasDefaultValueSql("getdate()"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public DateTime Created { get; set; } }
關聯式資料庫中的索引對映到與實體框架核心中的索引相同的概念。
按照約定,索引命名為IX_<type name>_<property name>。對於複合索引<property name>,將成為以下劃線分隔的屬性名稱列表。
不能使用資料批註設定索引。
你可以使用熟知的API來設定索引的名稱。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .HasIndex(b => b.Url) .HasName("Index_Url"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
你還可以指定篩選器。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .HasIndex(b => b.Url) .HasFilter("[Url] IS NOT NULL"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
使用SQL Server提供程式EF為唯一索引中包含的所有可以為null的列新增"IS NOT NULL"篩選器。若要重寫此約定,可以null提供一個值。
class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>() .HasIndex(b => b.Url) .IsUnique() .HasFilter(null); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } }
在SQL Server索引中包含列,當查詢中的所有列都作為鍵列或非鍵列包含在索引中時,可以通過包含列設定索引以顯著提高查詢效能。
class MyContext : DbContext { public DbSet<Post> Posts { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Post>() .HasIndex(p => p.Url) .IncludeProperties(p => new { p.Title, p.PublishedOn }) .HasName("Index_Url_Include_Title_PublishedOn"); } } public class Post { public int PostId { get; set; } public string Url { get; set; } public string Title { get; set; } public DateTime PublishedOn { get; set; } }
到此這篇關於ASP.NET Core使用EF為關聯式資料庫建模的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45