gpt4 book ai didi

c# - 如何对 Entity Framework Code First 映射进行单元测试?

转载 作者:可可西里 更新时间:2023-11-01 08:29:38 24 4
gpt4 key购买 nike

我正在使用 Code First 将类映射到现有数据库。我需要一种方法来对这些映射进行单元测试,它们混合了基于约定、基于属性和流畅的 API。

为了进行单元测试,我需要确认类的属性映射到数据库中正确的表名和列名。此测试需要针对上下文执行,并且应首先涵盖代码的所有配置选项。

在非常高的层次上,我希望断言类似(伪代码)的东西:

Assert.IsTrue(context.TableFor<Widget>().IsNamed("tbl_Widget"));
Assert.IsTrue(context.ColumnFor<Widget>(w => w.Property).IsNamed("WidgetProperty"));

最佳答案

要考虑的另一个想法是使用 Linq 和 ToString()。

例如:

context.Widget.Select(c => c.Property).ToString()

SQL Server Provider 的结果:

"SELECT [Var_3].[WidgetProperty] AS [WidgetProperty] FROM [dbo].[Widget]..."

现在我们可以将它全部隐藏在一些扩展方法中,并解析生成的 SQL,它看起来几乎像你的伪代码:

Assert.IsTrue(context.Widgets.GetSqlColumnNameFor(w => w.Property).IsNamed("WidgetProperty"));

扩展草案:

public string GetSqlColumnNameFor<TSource>(this DbSet<T> source, Expression<Func<TSource, TResult>> selector)
{
var sql = source.Select(selector).ToString();

var columnName = sql... // TODO : Some regex parsing

return
columnName;
}

类似地,我们可以创建 GetSqlTableNameFor()。

更新:我决定寻找一些专门的 SQL 解析器,所以这个解决方案更通用,显然 .NET 有这样的东西:

http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use-general-sql-parser/generate-internal-query-parse-tree-in-xml-for-further-processing/

关于c# - 如何对 Entity Framework Code First 映射进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323547/

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