私はいくつかのユニットテストを行うためにEffort(EF4用)を使用しています。
var ctx= Effort.ObjectContextFactory.CreateTransient<TheContext>(Shared.Connection);
ctx.companies.AddObject(new company() { ID = 100, name = "Agent", is_agent = true });
ctx.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave);
会社のID列はIDフィールドです。上記のクエリを実行すると、ID値は100ではなく1になります。Effortを使用している間にIdentity_insertを制御する方法はありますか
これは、このスレッドにソリューションを追加するだけです。 @MrBlueSkyは、上記のコメントに解決策の達成されたリンクを追加します 。しかし、リンク上で使用されるDbConfiguration
は、最新のEffortにはもう存在しません。解決策はまだEffort.EF6 [version="1.3.0"]
ます。また、 SetIdentityFields
でEffortConnection.DbManager
メソッドを使用して、IDフィールドをオンまたはオフにすることができます
if (Effort.DbConnectionFactory.CreateTransient() is EffortConnection connection)
{
connection.Open();
connection.DbManager.SetIdentityFields(false);
connection.DbManager.ClearMigrationHistory();
connection.Close();
}
オン
// Add data with explicitly set id
Person initPerson = new Person { Id = 5, FirstName = "John", LastName = "Doe" };
dataInitContext.People.Add(initPerson);
dataInitContext.SaveChanges();
Assert.AreEqual(5, initPerson.Id);
// Enable identity field
connection.Open();
connection.DbManager.SetIdentityFields(true);
connection.Close();