首先使用代码禁用整数主键上的标识(自动递增)

gw0*_*gw0 38 entity-framework asp.net-mvc-3

我在ASP.NET MVC 3应用程序中使用代码优先方法,并且models(public int Id { get; set; })中的所有整数主键默认配置为具有自动递增的标识.如何禁用此功能并启用手动输入主键的整数?

实际情况是Id整数具有特殊含义,因此我希望它们在创建时可以选择,然后可以编辑.如果在创建时未给出整数,则自动递增,这将是理想的,否则使用指定的值.但可编辑的主要字段是我的主要需求.在ASP.NET MVC 3中有没有办法优雅地做到这一点?

小智 53

使用这些数据注释选项:

  • [System.ComponentModel.DataAnnotations.KeyAttribute()]
  • [System.ComponentModel.DataAnnotations.DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]

  • **NAMESPACE CHANGE:**这是2015年,并且这个答案的命名空间已经改变:`[System.ComponentModel.DataAnnotations.KeyAttribute()] [System.ComponentModel.DataAnnotations.**Schema**.DatabaseGenerated(System.ComponentModel. DataAnnotations.****模式.DatabaseGeneratedOption.None)]` (4认同)
  • 此外,不需要"KeyAttribute"的"属性"部分,并且没有理由不在顶部放置"使用":`使用System.ComponentModel.DataAnnotations;使用System.ComponentModel.DataAnnotations.Schema; [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)]` (4认同)

Wil*_*ack 28

您可以使用FluentMapping:

modelBuilder.Entity<*entityname*>().Property(m => m.*fieldname*)
             .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)


Ren*_*ené 13

If you want to use fluent api with EntityFramework Core 2.0 you write:

modelBuilder.Entity<*myEntity*>()
  .Property(e => e.*myFieldname*)
  .ValueGeneratedNever();
Run Code Online (Sandbox Code Playgroud)


pix*_*ker 7

使用属性:

public class MessageSubject
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Id { get; set; }
        public string Title { get; set; }
        public string Comment { get; set; }
        public bool BuildIn { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)