3

.Net Core MVC 사용. EntityFrameworkCore가 자동으로 ID 속성을 생성 할 수 있도록 모델을 설정해야합니다. 나는 단지 [Key] 주석을 추가하는 것이이 작업을 수행 할 것이라고 생각했지만 그렇지 않습니다. 사실 ID 필드가 공백으로 남겨지면 오류가 발생합니다. ID 필드는 항상 사용자가 숨기고 있기 때문에 공백으로 남겨 둡니다.EntintyFramework 코어 자동 생성 키 ID 속성

매번 모델의 고유 ID를 자동 생성해야합니다. 어떻게해야합니까? 내 ID 속성의 유형은 현재 int입니다. 자동 장군으로

ExampleModel

public class ExampleModel 
{ 
    [Key] 
    public int ID { get; set; } 
    public string SomeData { get; set; } 
} 

ExampleView

@model MyNamespace.Models.ExampleModel 

<form asp-action="Create" asp-controller="ExampleModel"> 
    @Html.EditorForModel() 
    <input type="submit" name="Submit" value="Create"/> 
</form> 

ExampleController

public IActionResult Create() 
{ 
    return View(); 
} 
public IActionResult Create (ExampleModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     _context.ExampleModels.Add(model); 
     _context.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(model); 
} 
+0

당신은 [키] 속성을 필요로하지 않는, 기본 – Alexan

+0

으로 기본 키가 왜이 자동으로 생성하지 않습니다이다? –

+0

해야합니다. 새 항목을 만들 때 오류가 발생합니까? 쇼 코드, 어떻게하는지. – Alexan

답변

3

ExampleModel에 대한 데이터 주석을 변경해야 자동으로 고유 ID가 생성됩니다.

ExampleModel

public class ExampleModel 
{ 
    [ScaffoldColumn(false)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 

    public string SomeData { get; set; } 
} 
+0

권. 네가 게시하기 바로 전에 나는 이것을 알았다. 그러나 나는 당신의 대답을 답으로 표시 할 것입니다. 감사합니다 –

+0

하하! 감사! 우리는 두 시간 모두 같은 시간에 알아 냈어야합니다. – kimbaudi

+0

DatabaseGenerated 속성이 필요하지 않습니다. EF는 관례에 따라 int PK에 대한 신원을 설정합니다. – Smit

0

키를 사용하려면 "NewId()"를 가리키는 DEFAULT 제약 조건을 정의해야합니다. [Key]은 기본 키 제약 조건 만 생성합니다.

데이터베이스 자체 또는 모델 생성시 수행 할 수 있습니다.

+1

EF 코어에서 필요하지 않습니다. – Alexan

+0

@Alexan 안녕하지만 EF 코어에서 데이터를 데이터베이스에 삽입 한 후 새로 자동 생성 된 ID가 모델에 다시 생성되지는 않습니까? SaveChanges() 후에; ? 왜 도움이 되었습니까? – Neo

+1

@Neo ID로 GUID를 사용하는 경우 코드에서 'Guid.CreateNew()'를 사용하고 제약 조건이나 기본값을 사용하지 마십시오.귀하의 코드에 guid 생성은 데이터베이스에 의해 생성 된 것과 같이 고유 한 것으로 보장됩니다. – Leonardo

0

알아 냈습니다. 내가해야 할 일은 데이터 Anotation을 추가하는 것입니다. [ScaffoldColumn(false)] 이제는 작동합니다.