【发布时间】:2021-11-29 21:40:54
【问题描述】:
我在播种数据时遇到错误。
型号:
public class Federation
{
public string FName { get; set; }
}
配置:
public class FederationConfiguration : IEntityTypeConfiguration<Federation>
{
public void Configure(EntityTypeBuilder<Federation> builder)
{
builder.HasKey(t => t.FName);
builder.Property(t => t.FName)
.HasMaxLength(20)
.IsRequired();
}
}
在 DbContext 中
protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(builder);
}
在播种方法中,我只是尝试将样本数据添加到数据库中:
public static class SeedFederations
{
public static async Task SeedFederationsDataAsync(ApplicationDbContext context)
{
if (context.Federations.Any())
{
return; // DB has been seeded
}
context.Federations.AddRange(
new Federation { FName = "FIFA" },
new Federation { FName = "UEFA" },
new Federation { FName = "UEFA" },
new Federation { FName = "AFC" }
);
context.SaveChanges();
await context.SaveChangesAsync();
}
}
我已尝试将另一组数据植入数据库:
public static async Task SeedAppLicationData(ApplicationDbContext context)
{
await SeedCountries.SeedCountriesDataAsync(context);
await SeedTeamTypes.SeedTeamTypesDataAsync(context);
await SeedTeams.SeedTeamsDataAsync(context);
await SeedBettingTypes.SeedBettingTypesDataAsync(context);
await SeedFederations.SeedFederationsDataAsync(context); // only error here
}
其他播种没问题,只有最后一个有问题。它不会播种数据,当我设置调试时,我会收到以下消息:
无法跟踪实体类型“Federation”的实例,因为已经在跟踪另一个与 {'FName'} 键值相同的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。 C...
我已经尝试过:修改字段名称以确保与其他表不一样。
请帮帮我。
谢谢
【问题讨论】:
-
只是为了检查一下,您使用不同的值吗?您在种子数据中输入了两次“UEFA”,也许重复的键会产生问题?
标签: c# entity-framework web asp.net-core-mvc seed