C# DatabaseGenerateOption.None在实体框架6中不起作用
我需要在数据库中手动输入主键值,因为我需要主键值与枚举同步。但是,使用DatabaseGenerateOption.None似乎不起作用。即使删除数据库并重新启动,JobType中的Id列仍然有一个自动插入主键 这与我使用枚举作为主键这一事实有关吗 工作实体C# DatabaseGenerateOption.None在实体框架6中不起作用,c#,.net,entity-framework,entity-framework-6,C#,.net,Entity Framework,Entity Framework 6,我需要在数据库中手动输入主键值,因为我需要主键值与枚举同步。但是,使用DatabaseGenerateOption.None似乎不起作用。即使删除数据库并重新启动,JobType中的Id列仍然有一个自动插入主键 这与我使用枚举作为主键这一事实有关吗 工作实体 public class Job : EntityBase { public long JobId { get; set; } public JobTypeEnum JobTypeId { get; set;
public class Job : EntityBase
{
public long JobId { get; set; }
public JobTypeEnum JobTypeId { get; set; }
public JobType JobType { get; set; }
}
工作类型
public class JobType
{
public JobTypeEnum Id { get; set; }
public String Name { get; set; }
public String Description { get; set; }
}
配置类
public class JobTypeConfiguration : EntityTypeConfiguration<JobType>
{
public JobTypeConfiguration()
{
HasKey(x => x.Id);
Property(x => x.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(x => x.Name).HasMaxLength(20);
Property(x => x.Description).HasMaxLength(255);
}
}
public class JobConfiguration : EntityTypeConfiguration<Job>
{
public JobConfiguration()
{
HasKey(x => x.JobId);
Property(x => x.JobId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasRequired(x => x.JobType).WithMany().HasForeignKey(x => x.JobTypeId);
}
}
编辑:
我找到了一个可能的原因。我有一个为Elmah创建表的迁移。如果我排除了这种迁移,那么它可以正常工作。如果我把它包括在内,那就没有了
奇怪的…我已经将您的代码添加到我的项目中。这是生成的迁移代码:
public override void Up()
{
CreateTable(
"dbo.Jobs",
c => new
{
JobId = c.Long(nullable: false, identity: true),
JobTypeId = c.Int(nullable: false),
})
.PrimaryKey(t => t.JobId)
.ForeignKey("dbo.JobTypes", t => t.JobTypeId, cascadeDelete: true)
.Index(t => t.JobTypeId);
CreateTable(
"dbo.JobTypes",
c => new
{
Id = c.Int(nullable: false),
Name = c.String(maxLength: 20),
Description = c.String(maxLength: 255),
})
.PrimaryKey(t => t.Id);
}
您可以看到dbo.JobTypes
表没有标识:true。您可能会发现您陷入了此处描述的问题:
最简单的方法可能是找到
JobType
的CreateTable
语句,修复它,然后重新创建数据库 干杯,但正如OP中所说的,当我删除并重新创建数据库时也会发生这种情况。您可以发布上一次迁移中的CreateTable
语句吗?在随后的迁移中是否有altertable
语句?我正在使用自动迁移。我想我已经找到了问题所在。更新了问题,但可能对任何人都没有任何用处。。。谢谢你的帮助。
public override void Up()
{
CreateTable(
"dbo.Jobs",
c => new
{
JobId = c.Long(nullable: false, identity: true),
JobTypeId = c.Int(nullable: false),
})
.PrimaryKey(t => t.JobId)
.ForeignKey("dbo.JobTypes", t => t.JobTypeId, cascadeDelete: true)
.Index(t => t.JobTypeId);
CreateTable(
"dbo.JobTypes",
c => new
{
Id = c.Int(nullable: false),
Name = c.String(maxLength: 20),
Description = c.String(maxLength: 255),
})
.PrimaryKey(t => t.Id);
}