答案 0 :(得分:0)
好的,问题是新填充的表没有填充,而且正在填充旧表。所以如果我跟随我的例子POCO课程' Person'并去除了plurilization。没有任何显式映射,只需要一个DbSet就会创建一个表Person。如果我然后我的映射分割表。
modelBuilder.Entity<Person>()
.Map(m =>
{
m.Properties(p => new { p.PersonId, p.FirstName, p.LastName });
m.ToTable("Person");
})
.Map(m =>
{
m.Properties(p => new { p.PersonId, p.OverlyLongDescriptionField });
m.ToTable("PersonDescription");
});
我的播种过程中出现了主键违规行为。这是因为如果我查看新更新的数据库,它仍然保留旧表并创建一个新表。但是,它不知道如何使用此方法删除数据:
public static void ClearRange<T>(this DbSet<T> dbSet) where T : class
{
using (var context = new EasyContext())
{
dbSet.RemoveRange(dbSet);
}
}
设置是偏的。所以我在想:&#34;好吧,如果我的播种数据包含在这一点上,我需要改进它,我理论上可以直接用SQL命令清理表格。&#34;这不是我想说的方法,但确实有用。
所以我向清算助手添加了更多数据:
public static void ResetIdentity(string tableName)
{
using (var context = new EasyContext())
{
context.Database.ExecuteSqlCommand($"DBCC CHECKIDENT('{tableName}', RESEED, 0)");
}
}
public static void DeleteTable(string tableName)
{
using (var context = new EasyContext())
{
context.Database.ExecuteSqlCommand($"DELETE {tableName}");
}
}
public static void DeleteTableAndResetIdentity(string tableName)
{
using (var context = new EasyContext())
{
context.Database.ExecuteSqlCommand($"DELETE {tableName}");
context.Database.ExecuteSqlCommand($"DBCC CHECKIDENT('{tableName}', RESEED, 0)");
}
}
然后我将此添加到我的种子例程的清理部分:
ClearingHelper.DeleteTable("dbo.PersonDescription");
ClearingHelper.DeleteTableAndResetIdentity("dbo.Person");
这很不幸以两种方式做到这一点:
但它有效!我现在可以通过规范化POCO来更改模式,并且仍然可以运行播种程序。