(19)ASP.NET Core EF 모델 생성(속성 및 제외 속성, 기본 키, 결과 값 포함)
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();
참고 문헌: 속성 포함 및 배제 키 생성 값
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.