Entity Framework Core는 고유 한 제약 조건 코드 우선 추가
속성을 사용하여 내 필드에 고유 한 제약 조건을 추가하는 방법을 사용할 수 없습니다.
public class User
{
[Required]
public int Id { get; set; }
[Required]
// [Index("IX_FirstAndSecond", 2, IsUnique = true)] not supported by core
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
다음 패키지를 사용하고 있습니다.
"Microsoft.EntityFrameworkCore": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
EF core에서는 데이터 주석을 사용하여 보안을 만들 수 없지만 Fluent API를 사용하여 수행 할 수 있습니다.
이것처럼 당신의 {Db}Context.cs
:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<User>()
.HasIndex(u => u.Email)
.IsUnique();
}
... 또는 buildAction에 오버로드를 사용하는 경우 :
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<User>(entity => {
entity.HasIndex(e => e.Email).IsUnique();
});
}
여기에서 자세한 내용을 읽을 수 있습니다. 색인
또한 여러 열에 고유 한 제한을 생성하려는 경우 간단하게 수행 할 수 있습니다 (@Sampath의 링크를 따름 ).
class MyContext : DbContext
{
public DbSet<Person> People { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasIndex(p => new { p.FirstName, p.LastName })
.IsUnique(true);
}
}
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
EF Core 용 솔루션
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Passport { get; set; }
}
public class ApplicationContext : DbContext
{
public DbSet<User> Users { get; set; }
public ApplicationContext()
{
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=efbasicsappdb;Trusted_Connection=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasAlternateKey(u => u.Passport);
//or: modelBuilder.Entity<User>().HasAlternateKey(u => new { u.Passport, u.Name})
}
}
DB 테이블은 다음과 가변합니다.
CREATE TABLE [dbo].[Users] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (MAX) NULL,
[Passport] NVARCHAR (450) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [AK_Users_Passport] UNIQUE NONCLUSTERED ([Passport] ASC)
);
이 모든 솔루션을 시도했지만 작동하지 않는 사람을 위해 솔루션을 시도합니다.
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<User>().Property(t => t.Email).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_EmailIndex") { IsUnique = true }));
}
OP는 고유 키에 대한 엔티티 클래스에 속성을 추가 할 수 있는지 여부를 묻습니다. 짧은 대답은 가능하지만 EF Core Team의 기본 기능이 아니라는 것입니다. 특성을 사용하여 Entity Framework Core 엔터티 클래스에 고유 키를 추가하려면 여기에 게시 한 작업을 수행 할 수 있습니다.
public class Company
{
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CompanyId { get; set; }
[Required]
[UniqueKey(groupId: "1", order: 0)]
[StringLength(100, MinimumLength = 1)]
public string CompanyName { get; set; }
[Required]
[UniqueKey(groupId: "1", order: 1)]
[StringLength(100, MinimumLength = 1)]
public string CompanyLocation { get; set; }
}
이 방법 중 어느 것도 .NET Core 2.2에서 저에게 효과가 없었지만이 목적을 위해 다른 기본 키를 정의하는 데 필요한 일부 코드를 적용 할 수있었습니다.
아래 인스턴스에서 OutletRef 필드가 고유한지 확인하고 싶습니다.
public class ApplicationDbContext : IdentityDbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Outlet>()
.HasIndex(o => new { o.OutletRef });
}
}
이렇게하면 데이터베이스에 필요한 고유 인덱스가 추가됩니다. 하지만 사용자 지정 오류 메시지를 지정하는 기능을 제공하지 않습니다.
유창한 API를 사용하여 고유 키 인덱스를 추가 할 수 있습니다. 아래 코드는 나를 위해 일했습니다.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().Property(p => p.Email).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_EmailIndex") { IsUnique = true }));
}
모델 구성을 통해 EF 코어에서 사용하려면
public class ApplicationCompanyConfiguration : IEntityTypeConfiguration<Company>
{
public void Configure(EntityTypeBuilder<Company> builder)
{
builder.ToTable("Company");
builder.HasIndex(p => p.Name).IsUnique();
}
}
참고 URL : https://stackoverflow.com/questions/41246614/entity-framework-core-add-unique-constraint-code-first
'IT' 카테고리의 다른 글
부모 순수 자바 펼쳐의 하위 요소 찾기 (0) | 2020.08.07 |
---|---|
Pandas Groupby : 결합 결합을 얻는 방법 (0) | 2020.08.07 |
Android는 온 스크린 키보드의 완료 키 누름을 감지합니다. (0) | 2020.08.07 |
Retrofit 2로 모든 요청에 헤더 추가 (0) | 2020.08.07 |
C #에서 XmlNode에서 특성 값을 읽는 방법은 무엇입니까? (0) | 2020.08.07 |