执行使用EF5 code首先迁移的IDENTITY_INSERT [英] Performing an IDENTITY_INSERT using EF5 Code First Migrations
问题描述
我有我试图通过code首先迁移,然后种子数据来创建POCO。问题是,我想播种时特定值插入到标识列。
I have a POCO that I am trying to create via Code First Migrations and then seed data. The problem is that I want to insert specific values into the identity column when seeding.
下面是我的POCO
public class Result
{
public long ResultId { get; set; }
public long? TeamId { get; set; }
public Team Team { get; set; }
}
这是在Configuration.cs种子法我AddOrUpdate调用
And here is my AddOrUpdate call in the Seed method of the Configuration.cs
context.Results.AddOrUpdate
(
r => r.ResultId,
new Result { ResultId = 101, TeamId = null },
new Result { ResultId = 201, TeamId = null }
);
正如预期的那样,它不插入的101和201的值,而是1和2有没有我可以向模型中的任何数据属性,以帮助这个?
As expected, it does not insert the values of 101 and 201, but instead 1 and 2. Are there any DataAttributes I can apply to the model to help with this?
推荐答案
该如何通过属性/公约关闭身份
This how to turn off Identity via attribute/conventions
public class Result
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long ResultId { get; set; }
public long? TeamId { get; set; }
public Team Team { get; set; }
}
这是你如何通过EntityTypeConfiguration关闭身份
This is how you turn off Identity via EntityTypeConfiguration
public class ResultMapper : EntityTypeConfiguration<Result>
{
public ResultMapper()
{
HasKey(x => x.ResultId);
Property(x => x.ResultId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
}
或者你也可以使用OnModelCreating超载
Or you can use the OnModelCreating overload
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Result>().Property(x => x.ResultId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
这篇关于执行使用EF5 code首先迁移的IDENTITY_INSERT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!