实体框架 - 手动设置新对象的ID

jda*_*vis 6 entity-framework entity-framework-4

我正在使用实体框架(数据库优先),我正在尝试将旧数据库中的一堆数据导入到我们的新数据库中.在某些情况下,对象ID在新数据库中保持与旧数据库相同是很重要的.通常,当您创建新对象并调用context.SaveChanges()时,它将自动为ID列分配标识值.

目前,我将在代码中设置新的对象ID,但是一旦我调用了context.SaveChanges(),它就会被Entity Framework分配的新对象覆盖.

我需要能够手动设置新对象中的ID,并在调用context.SaveChanges()后保留它.

Eri*_* J. 7

Database Generated Option也可以指定为属性本身的属性,而不是使用流畅的API.

public class Foo
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public virtual int Id { get; set;}
}
Run Code Online (Sandbox Code Playgroud)


Sla*_*uma 6

您可以StoreGeneratedPattern在模型设计器(或EDMX文件)中设置实体的键属性None.对于整数键列,它是Identity默认值,这意味着Entity Framework不会将键值发送到数据库,因为它期望数据库将创建键.如果模式是None它,则将值发送到您为实体提供的数据库.

(对于DbContext(EF> = 4.1),它被调用DatabaseGeneratedOption.)

当然,同时您还需要关闭数据库表中键列的Identity规范.