gpt4 book ai didi

.net-4.0 - Entity Framework 4 的内存数据库

转载 作者:行者123 更新时间:2023-12-02 16:48:09 26 4
gpt4 key购买 nike

有人知道与 .NET 4/EF 4 配合良好的内存数据库吗?具体来说,我正在考虑单元测试,这样每个设置都可以轻松创建数据库,并用默认值填充它,并且每次拆卸都可以快速销毁它。

我听说 SQLite doesn't support .NET 4然而,其他人在使用它作为 SQLServer 的替代品时遇到了麻烦(应用程序将在 Release模式下运行)。

过去,我使用 DevExpress XPO ORM,它有一个内置的内存数据库,非常适合单元测试。

最佳答案

如果您的模型具有数据库生成的 key (通常在 EF4 中使用 [DatabaseGeneerated(DatabaseGeneeratedOption.Identity)] 注释指定),则使用 CE4 进行单元测试时将会出现问题,因为 CE4 不支持此功能。

但我找到了一个简单的解决方法,无需修改我的生产代码(在 SQL 2008 上运行)。我创建了 DbContext 的代理子类,并在其中重写了 OnModelCreating 以删除注释,并重写了 SaveChanges 以手动设置 ID:

public class TestContext : MyDbContext
{
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>().Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

base.OnModelCreating(modelBuilder);
}

public override int SaveChanges()
{
foreach (var entry in ChangeTracker.Entries<MyEntity>().Where(e => e.State == EntityState.Added))
{
entry.Entity.Id = Guid.NewGuid();
}
return base.SaveChanges();
}
}

通过这些细微的调整,我现在可以在 CE4 中对在生产中的 SQL 2008 下运行的相同存储库代码进行单元测试。

如果您使用整数 ID 而不是 GUID,这里有一个很好的扩展方法,可以直接插入到上述解决方案中:http://enigmadomain.wordpress.com/2010/01/06/sql-compact-identity-columns-and-entity-framework/

关于.net-4.0 - Entity Framework 4 的内存数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4199223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com