(19)ASP.NET Core EF 모델 생성(속성 및 제외 속성, 기본 키, 결과 값 포함)

13195 단어
1. Fluent API란 무엇입니까?
EF에 포함된 규칙은 POCO 클래스를 테이블에 매핑합니다.그러나 이 약속을 지키지 못하거나 지키지 않으려면 약속 지시 밖의 다른 대상에 실체를 비추어야 하기 때문에 Fluent API와 주석은 모두 한 가지 방법입니다. 이 두 가지 방법은 EF가 속성을 비추는 동안 약속을 돌리도록 설정하는 것입니다.Code first fluent API는 OnModelCreating 재작성 방법을 사용하여 파생된 DbContext에 가장 많이 액세스합니다.
2. 속성 포함 및 제외
약속에 따라 데이터 모델에는 하나의 Getter와setter의 공공 속성이 포함되어 있습니다.
2.1 속성 포함
속성 포함 홈페이지 설명은 이해하기 어렵다. 개인적으로 OnModelCreating 방법에서 Blog모델을 포함한다고 생각하면 우리가 Blog모델을 호출하여 데이터를 읽고 쓸 때 연결 데이터베이스에서 대응하는 Blog표를 읽는다.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  modelBuilder.Entity();
}

2.2 속성 제외
BlogMetadata에서 데이터를 읽고 싶지 않으면 데이터 주석이나 fluent API를 사용하여 모델에서 이 실체 유형을 제외할 수 있습니다.
2.2.1 데이터 주석
namespace EFModeling.DataAnnotations.IgnoreType
{
    class MyContext : DbContext
    {
        public DbSet Blogs { get; set; }
    }
    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
        public BlogMetadata Metadata { get; set; }
}
 //        
    [NotMapped]
    public class BlogMetadata
    {
        public DateTime LoadedFromDatabase { get; set; }
    }
}

2.2.2Fluent API
namespace EFModeling.FluentAPI.IgnoreType
{
    class MyContext : DbContext
    {
        public DbSet Blogs { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
             //Ignore            
        modelBuilder.Ignore();
        }
    }
    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. 메인 키
관계형 데이터베이스를 사용할 때 메인 키 개념과 관련되어 모든 실체 실례의 주요 유일한 표식자로 사용된다.
3.1 데이터 주석
namespace EFModeling.DataAnnotations.KeySingle
{
    class MyContext : DbContext
    {
        public DbSet Cars { get; set; }
    }
    class Car
    {
       //  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 Cars { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity()
          //  LicensePlate   
                .HasKey(c => c.LicensePlate);
        }
    }
    class Car
    {
        public string LicensePlate { get; set; }
        public string Make { get; set; }
        public string Model { get; set; }
    }
}

4. 생성 값
속성에 사용할 수 있는 세 가지 값 생성 모드가 있습니다: ● 값 생성이 없습니다. 값 생성이 없다는 것은 데이터베이스에 저장할 유효한 값을 항상 제공해야 한다는 것을 의미합니다.새 엔티티에 유효한 값을 지정하고 컨텍스트에 새 엔티티를 추가해야 합니다.● 추가할 때 값 생성: 추가할 때 값 생성, 새 솔리드에 대한 값 생성을 의미합니다.● 추가 또는 업데이트 시 값 생성: 추가 또는 업데이트 시 값이 생성되므로 레코드를 저장(삽입 또는 업데이트)할 때마다 새 값이 생성됩니다.주: 데이터베이스에 값을 추가하거나 업데이트할 때 자동으로 생성하려면 트리거와 기본값을 설정하는 등 방법으로 생성할 수 있습니다.예를 들어, 추가 또는 업데이트 시 DateTime 속성을 생성하도록 지정하는 경우 값을 생성하는 방법을 설정해야 합니다.이 작업을 수행하려면 다음 예제 트리거와 같이 GETDATE()의 기본값을 구성하여 새 행의 값을 생성한 다음 데이터베이스 트리거를 사용하여 업데이트 중에 값을 생성할 수 있습니다.
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 데이터 주석
4.1.1 무치 생성
public class Blog
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int BlogId { get; set; }
    public string Url { get; set; }
}

4.1.2 추가할 때 값 생성
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime Inserted { get; set; }
}

4.1.3 추가 또는 업데이트 시 값 생성
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 무치 생성
modelBuilder.Entity()
    .Property(b => b.BlogId)
    .ValueGeneratedNever();

4.2.2 추가할 때 값 생성
modelBuilder.Entity()
    .Property(b => b.Inserted)
.ValueGeneratedOnAdd();

4.2.3 추가 또는 업데이트 시 값 생성
modelBuilder.Entity()
    .Property(b => b.LastUpdated)
    .ValueGeneratedOnAddOrUpdate();

참고 문헌: 속성 포함 및 배제 키 생성 값

좋은 웹페이지 즐겨찾기