C# EF代码优先,回购和;工作单元模式-无法在主键列上插入空值
我首先使用实体框架代码、存储库和工作单元模式将数据从一个数据库传输到另一个数据库。我需要在目标数据库中维护源数据库的唯一标识符,这样我就不会让数据库处理记录密钥管理 当我尝试将记录插入目标数据库时,它抛出以下EF数据验证错误: 无法将值NULL插入到“MyPrimaryKey”列、表“DestinationDb.db.MyTable”中;列不允许空值。插入失败。声明已被终止 在我的模型中,我显式地标识主键属性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
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修复了我的问题…谢谢!