Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码优先实体框架使用自定义ID插入数据_C#_.net 4.0_Entity Framework 4.1_Code First - Fatal编程技术网

C# 代码优先实体框架使用自定义ID插入数据

C# 代码优先实体框架使用自定义ID插入数据,c#,.net-4.0,entity-framework-4.1,code-first,C#,.net 4.0,Entity Framework 4.1,Code First,我在我的项目中使用CodeFirstEF,在插入带有自定义id的数据时面临问题 当我试图插入具有自定义ID(例如999)的数据时,EF会忽略它并将递增的ID插入表中 我的模型: public class Address { [Key] public int Id { get; set; } public string FirstName { get; set; } ... } 如何解决这个问题 编辑: 1) 如何从N开始递增,而不是从0开始递增

我在我的项目中使用CodeFirstEF,在插入带有自定义id的数据时面临问题

当我试图插入具有自定义ID(例如999)的数据时,EF会忽略它并将递增的ID插入表中

我的模型:

public class Address
{
        [Key]
        public int Id { get; set; }
        public string FirstName { get; set; }
...
}
如何解决这个问题

编辑:

1) 如何从N开始递增,而不是从0开始递增


2) 若我不指定自定义ID,DB必须递增并插入自己的ID。如果我指定自定义ID,DB必须插入它。可能吗?

您可以使用以下属性

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
在类的键上或使用fluentAPI

modelBuilder.Entity<Address>().Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity().Property(p=>p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

它实际上在
DbContext
类的
OnModelCreating
中。通过在
DbContext类中添加以下内容,您可以根据需要设置序列号以开始和递增
请参见此处示例:

class MyContext:DbContext
{
公共数据库集命令{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.HasSequence(“订单号”,模式:“共享”)
.StartsAt(1000)
.增加(5);
//引入序列后,可以使用它为模型中的属性生成值。例如,可以使用默认值插入序列中的下一个值。
modelBuilder.Entity()
.Property(o=>o.OrderNo)
.HasDefaultValueSql(“shared.orderNumber的下一个值”);
}
}

EF Core中,您可以使用:

builder.Property(x => x.Id).ValueGeneratedNever();


是否要从整个表中删除autoincrement函数?不,我不想。若我不指定自定义ID,DB必须递增并插入自己的ID。如果我指定自定义ID,DB必须插入它。可能吗?是否可以从N开始递增,但不能从0开始递增?谢谢您的回答。是否可以使用DatabaseGenerateOption.Identity并插入自定义ID?否,因为这将向EF表明您希望数据库为您生成ID,EF将尽职尽责地忽略您在该字段上设置的任何值。
builder.Property(x => x.Id).ValueGeneratedNever();
[DatabaseGenerated(DatabaseGeneratedOption.None)]