728x90
기본키를 두개 이상 처리하기 위해선 아래 처럼 Model 정의시 PrimaryKey 를 정의해서 쓰면 됩니다
(.net core 7.0 부터 지원)
[PrimaryKey(nameof(No), nameof(Name))]
internal class User
{
public int No { get; set; }
public string Name { get; set; }
public string? Dept { get; set; }
public int Age { get; set; }
}
결과
전체코드
using Microsoft.EntityFrameworkCore;
namespace EFTest
{
internal class Program
{
static void Main(string[] args)
{
using (var db = new MyDbContext())
{
db.Database.EnsureCreated();
db.Employees.Add(new Employee { Name = "Kang Jun", Age = 40 });
db.Users.Add(new User { No = 1, Name = "Kang Jun", Dept = "A", Age = 40 });
db.Users.Add(new User { No = 2, Name = "Danny Jun", Dept = "B", Age = 30 });
db.SaveChanges();
}
}
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
[PrimaryKey(nameof(No), nameof(Name))]
public class User
{
public int No { get; set; }
public string Name { get; set; }
public string? Dept { get; set; }
public int Age { get; set; }
}
public class MyDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=mydb.db");
}
}
}
}
결과 데이터
.NET 6.0 에서는 아래처럼 OnModelCreating 에서 HasKey 에서 처리하면 pk 를 여러개 지정할수 있습니다.
public class AdminUser
{
public int No { get; set; }
public string Name { get; set; }
public string? Dept { get; set; }
public int Age { get; set; }
}
public class MyDbContext : DbContext
{
public DbSet<AdminUser> AdminUsers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=mydb.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<AdminUser>().HasKey(d => new { d.No, d.Name });
}
}
참고
https://learn.microsoft.com/ko-kr/ef/core/modeling/keys?tabs=data-annotations
728x90
'C#' 카테고리의 다른 글
[C#] Entity Framework Core 에서 필드 Auto Increment 필드 처리하기 (0) | 2023.06.18 |
---|---|
[C#] Entity Framework Core 에서 특정 필드 테이블에서 제외하기 (0) | 2023.06.18 |
[C#] Entity Framework Core 로 Sqlite 사용하기 (0) | 2023.06.13 |
[C#] TIBCO.Rendezvous 에러 - Message.GetField(fieldName) .. 'KERNEL32.dll' or one of its dependencies. (0) | 2023.05.31 |
[C#] Swagger 분석하기 (0) | 2023.05.12 |