使用EntityFramework 5,我有一个新的数据库,我需要在表上指定身份种子,而不是“1”。
使用模型构建器,迁移或其他方法,是否有一种简单的方法来更改表的标识生成以处理此问题?
目前,我正在考虑创建在迁移期间生成的自定义sql,以便在创建表后对其进行修改。一个更清洁的解决方案是首先让CREATE TABLE正确。
答案 0 :(得分:0)
我正在处理同样的问题,现在按照计划a:
通过以下方式初始化自定义迁移计划:
Database.SetInitializer(new MigrateDatabaseToLatestVersion());
检查是否必须生成实体(类 MyInitConfiguration):
protected override void Seed(MyDbContext context)
{
var he = context.Set<MyEntity>();
if (!he.Any(h => h.Id == 0))
{
...place to add code...
以正常方式添加实体(或多个实体),但“在执行提交之前 - 调用外部sql脚本:
he.Add(new MyEntity{ Id = -5, Alias = "system",Title = "System"});
he.Add(new MyEntity{ Id = -4, Alias = "system1",Title = "System1"});
he.Add(new MyEntity{ Id = -3, Alias = "system2",Title = "System2"});
context.Database.ExecuteSqlCommand(
string.Format("DBCC CHECKIDENT ('{2}', RESEED, {0});",-5,"MyTableName")
);
context.Commit();
或我为DBContext准备的扩展程序:
public static void UpdateIdentity<T, TKey>(this MyDbContext context, Func<T> data, TKey staticPreviousId, string tableName,string columnName="id")
where T : MyEntity<TKey>
{
var r = data();
context.Database.ExecuteSqlCommand(string.Format("DBCC CHECKIDENT ('{2}', RESEED, {0});", staticPreviousId, r.Id, tableName, columnName));
context.Commit();
}
然后执行:
context.UpdateIdentity(() => myDataSet.Add(new MyEntity{ Id = -5, Alias = "system",Title = "System"}), -5, "myTableName");
context.UpdateIdentity(() => myDataSet.Add(new MyEntity{ Id = 81, Alias = "system",Title = "System"}), 80, "myTableName");
答案 1 :(得分:0)
遗憾的是,在执行查询批处理之前,我还没有找到“添加预查询”的方法 如果有人会找到一种方法 - 然后在执行提交之前 - 我们可以执行sql: “set identity_inster on”
后
“设置identity_inster off”
对于t-sql来说更自然