亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ASP.NET?Core使用EF創(chuàng)建模型(包含屬性、排除屬性、主鍵和生成值)

 更新時(shí)間:2022年04月07日 15:44:05   作者:暗斷腸  
這篇文章介紹了ASP.NET?Core使用EF創(chuàng)建模型的的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.什么是Fluent API?

EF中內(nèi)嵌的約定將POCO類(lèi)映射到表。但是,有時(shí)您無(wú)法或不想遵守這些約定,需要將實(shí)體映射到約定指示外的其他對(duì)象,所以Fluent API和注解都是一種方法,這兩種方法是用來(lái)配置EF在映射屬性時(shí)繞開(kāi)約定。Code first fluent API最常訪問(wèn)通過(guò)重寫(xiě)OnModelCreating方法在派生DbContext。

2.包含屬性和排除屬性

按照約定,數(shù)據(jù)模型中都包含一個(gè)getter和一個(gè)setter公共屬性。

2.1包含屬性

包含屬性官網(wǎng)解釋有點(diǎn)難以理解,我個(gè)人認(rèn)為在OnModelCreating方法配置包含Blog模型,那么當(dāng)我們調(diào)用Blog模型讀寫(xiě)數(shù)據(jù)時(shí)候就會(huì)從連接數(shù)據(jù)庫(kù)中讀寫(xiě)對(duì)應(yīng)Blog表。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  modelBuilder.Entity<Blog>();
}

2.2排除屬性

如果你不想往BlogMetadata上讀寫(xiě)數(shù)據(jù),可以使用數(shù)據(jù)批注或者fluent API從模型中排除該實(shí)體類(lèi)型。

2.2.1數(shù)據(jù)批注

namespace EFModeling.DataAnnotations.IgnoreType
{
    class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
    }
    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
        public BlogMetadata Metadata { get; set; }
}
 //讀寫(xiě)不映射該實(shí)體
    [NotMapped]
    public class BlogMetadata
    {
        public DateTime LoadedFromDatabase { get; set; }
    }
}

2.2.2Fluent API

namespace EFModeling.FluentAPI.IgnoreType
{
    class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
             //Ignore方法就是讀寫(xiě)不映射該實(shí)體
        modelBuilder.Ignore<BlogMetadata>();
        }
    }
    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
        public BlogMetadata Metadata { get; set; }
    }
    public class BlogMetadata
    {
        public DateTime LoadedFromDatabase { get; set; }
    }
}

3.主鍵

使用關(guān)系型數(shù)據(jù)庫(kù)時(shí)候,都會(huì)涉及到主鍵概念,用作每個(gè)實(shí)體實(shí)例的主要唯一標(biāo)識(shí)符。

3.1數(shù)據(jù)批注

namespace EFModeling.DataAnnotations.KeySingle
{
    class MyContext : DbContext
    {
        public DbSet<Car> Cars { get; set; }
    }
    class Car
    {
       //設(shè)置LicensePlate為主鍵
        [Key]
        public string LicensePlate { get; set; }
        public string Make { get; set; }
        public string Model { get; set; }
    }
}

3.2Fluent API

namespace EFModeling.FluentAPI.KeySingle
{
    class MyContext : DbContext
    {
        public DbSet<Car> Cars { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Car>()
          //設(shè)置LicensePlate為主鍵
                .HasKey(c => c.LicensePlate);
        }
    }
    class Car
    {
        public string LicensePlate { get; set; }
        public string Make { get; set; }
        public string Model { get; set; }
    }
}

4.生成值

有三個(gè)可用于屬性的值生成模式:
●無(wú)值生成:沒(méi)有值生成意味著,需始終提供要保存到數(shù)據(jù)庫(kù)的有效值。必須先將有效的值賦予新的實(shí)體,再將這些新的實(shí)體添加到上下文中。
●在添加時(shí)生成值:在添加時(shí)生成值,意思是為新實(shí)體生成值。
●在添加或更新時(shí)生成值:在添加或更新時(shí)生成值,意味著在每次保存該記錄(插入或更新)時(shí)生成新值。
注:如果想在數(shù)據(jù)庫(kù)端添加或更新時(shí)自動(dòng)生成值,我們可以通過(guò)觸發(fā)器和配置默認(rèn)值等方法生成。例如,如果指定在添加或更新時(shí)要生成DateTime屬性,則必須設(shè)置生成值的方法。若要執(zhí)行此操作,一種方法是配置GETDATE() 的默認(rèn)值以生成新行的值,然后即可使用數(shù)據(jù)庫(kù)觸發(fā)器在更新過(guò)程中生成值,如下面的示例觸發(fā)器所示:

USE [Blogging]
GO
/****** Object:  Trigger [dbo].[Blog_Update_Trigger]    Script Date: 2019/10/22 16:18:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Blog_Update_Trigger] ON [dbo].[Blog]
    AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;         
    IF ((SELECT TRIGGER_NESTLEVEL()) > 1) RETURN;
DECLARE @Id INT

    SELECT @Id = INSERTED.BlogId
    FROM INSERTED
          
    UPDATE dbo.Blog
    SET Updatetime = GETDATE()
    WHERE BlogId = @Id
END

4.1數(shù)據(jù)批注

4.1.1無(wú)值生成

public class Blog
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int BlogId { get; set; }
    public string Url { get; set; }
}

4.1.2在添加時(shí)生成值

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime Inserted { get; set; }
}

4.1.3在添加或更新時(shí)生成值

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime LastUpdated { get; set; }
}

4.2Fluent API

4.2.1無(wú)值生成

modelBuilder.Entity<Blog>()
    .Property(b => b.BlogId)
    .ValueGeneratedNever();

4.2.2在添加時(shí)生成值

modelBuilder.Entity<Blog>()
    .Property(b => b.Inserted)
.ValueGeneratedOnAdd();

4.2.3在添加或更新時(shí)生成值

modelBuilder.Entity<Blog>()
    .Property(b => b.LastUpdated)
    .ValueGeneratedOnAddOrUpdate();

到此這篇關(guān)于ASP.NET Core使用EF創(chuàng)建模型的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論