EntityFramework Core自动生成密钥id属性

时间:2017-05-10 17:30:14

标签: c# asp.net-core asp.net-core-mvc data-annotations entity-framework-core

使用.Net Core MVC。我需要设置我的模型,以便EntityFrameworkCore将自动生成ID属性。我认为只需添加[Key]注释就可以做到这一点,但事实并非如此。事实上,当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);
}

4 个答案:

答案 0 :(得分:7)

您需要更改ExampleModel的数据注释,以便自动生成唯一ID。

<强> ExampleModel

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

    public string SomeData { get; set; }
}

答案 1 :(得分:0)

要自动生成密钥,必须定义指向“NewId()”的DEFAULT约束。 [Key]只会创建主键约束。

您可以在数据库本身或模型生成

中执行此操作

答案 2 :(得分:0)

我明白了。我需要做的就是添加数据转换[ScaffoldColumn(false)]现在它可以正常工作。

答案 3 :(得分:0)

我想通过ModelState验证的另一种方法是将其从ModelState中删除。

ModelState.Remove("ID");