使用EntityFramework 5,我有一个新的数据库,我需要指定表上的身份种子是非“1”的东西。自定义EF代码第一个身份生成
无论是模型构建器,迁移或其他方式,是否有一种简单的方法来更改表的身份生成来处理此问题?
目前,我正在研究创建自定义sql以在迁移期间调用以在创建表后对其进行修改。更清洁的解决方案将首先获得CREATE TABLE正确。
使用EntityFramework 5,我有一个新的数据库,我需要指定表上的身份种子是非“1”的东西。自定义EF代码第一个身份生成
无论是模型构建器,迁移或其他方式,是否有一种简单的方法来更改表的身份生成来处理此问题?
目前,我正在研究创建自定义sql以在迁移期间调用以在创建表后对其进行修改。更清洁的解决方案将首先获得CREATE TABLE正确。
我有同样的问题的工作,现在下面的计划有:
初始化定制的迁移计划是:
Database.SetInitializer(新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");
不幸的是我还没有找到一个方法来“添加预查询”前执行查询批处理 如果有人会找到一个方法来做到这一点 - 然后前执行提交 - 我们可以执行SQL:
后
“设置identity_inster关”
“上设置identity_inster”这对t-sql来说更加自然