C# EF代码优先,回购和;工作单元模式-无法在主键列上插入空值

C# EF代码优先,回购和;工作单元模式-无法在主键列上插入空值,c#,entity-framework,ef-code-first,repository-pattern,unit-of-work,C#,Entity Framework,Ef Code First,Repository Pattern,Unit Of Work,我首先使用实体框架代码、存储库和工作单元模式将数据从一个数据库传输到另一个数据库。我需要在目标数据库中维护源数据库的唯一标识符,这样我就不会让数据库处理记录密钥管理 当我尝试将记录插入目标数据库时,它抛出以下EF数据验证错误: 无法将值NULL插入到“MyPrimaryKey”列、表“DestinationDb.db.MyTable”中;列不允许空值。插入失败。声明已被终止 在我的模型中,我显式地标识主键属性 using System.ComponentModel.DataAnnotations

我首先使用实体框架代码、存储库和工作单元模式将数据从一个数据库传输到另一个数据库。我需要在目标数据库中维护源数据库的唯一标识符,这样我就不会让数据库处理记录密钥管理

当我尝试将记录插入目标数据库时,它抛出以下EF数据验证错误:

无法将值NULL插入到“MyPrimaryKey”列、表“DestinationDb.db.MyTable”中;列不允许空值。插入失败。声明已被终止

在我的模型中,我显式地标识主键属性

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnontations.Schema;

[Table("MyTable")]
public new class MyTable
{
    [Key]
    public int MyPrimaryKey { get; set; }
}
调试应用程序时,
MyPrimaryKey
的值在整个过程中保持不变,并引发异常,直到我调用目标数据库
DbContext中的
SaveChanges()
方法。调试时查看
DbContext
对象,它具有
MyPrimaryKey`属性的值

以下是源代码:

public class DestinationEntities : DbContext, IDbContext
{
    public DestinationEntities() : base("DestinationEntities") { }

    public DbSet<MyTable> MyTable { get; set; }

    public override int SaveChanges() 
    {
        return base.SaveChanges(); //exception thrown here
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    {
        base.OnModelCreating(modelBuilder);
    }

    IDbSet<T> IDbContext.Set<T>() 
    {
        return this.Set<T>();
    }
}
公共类目标:DbContext、IDbContext
{
公共DestinationEntities():基本(“DestinationEntities”){}
公共DbSet MyTable{get;set;}
公共覆盖int SaveChanges()
{
return base.SaveChanges();//此处引发异常
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
}
IDbSet IDbContext.Set()
{
返回这个.Set();
}
}
是否有人对该场景有经验,以及我如何解决问题?

感谢在评论中发布答案的人:

我必须将
[DatabaseGenerated(DatabaseGeneratedOption.None)]
添加到
MyTable
类中的
MyPrimaryKey
属性中

[Table("MyTable")]
public new class MyTable
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int MyPrimaryKey { get; set; }
}

您没有dba为您执行此操作吗?请尝试在目标实体的键上设置
DatabaseGeneratedOption.None
。@Mardoxx该在哪里设置该选项?在
MyTable
模型或
destinationenties
对象上?在
MyTable
MyPrimaryKey
属性上,例如
[DatabaseGenerated(DatabaseGeneratedOption.None)]
下面的
[Key]
@Mardoxx修复了我的问题…谢谢!