使用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來說更加自然