使用Effort进行单元测试 - 添加具有标识的记录


我正在使用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值为1而不是100.有没有办法在使用Effort时控制Identity_insert

一般承认的答案

这只是为了在这个线程上添加解决方案。 @MrBlueSky在上面的评论中添加了解决方案的成果链接 。但是,在链接上使用的DbConfiguration在最新的Effort上不再存在。该解决方案仍存在于Effort.EF6 [version="1.3.0"] 。并且您可以使用SetIdentityFields上的EffortConnection.DbManager方法打开或关闭标识字段

if (Effort.DbConnectionFactory.CreateTransient() is EffortConnection connection)
{
    connection.Open();
    connection.DbManager.SetIdentityFields(false);
    connection.DbManager.ClearMigrationHistory();
    connection.Close();
}

开启

if (Effort.DbConnectionFactory.CreateTransient() is EffortConnection connection)
{
    connection.Open();
    connection.DbManager.SetIdentityFields(false);
    connection.DbManager.ClearMigrationHistory();
    connection.Close();
}




许可下: CC-BY-SA
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因