gpt4 book ai didi

c# - 没有配置文件的 Entity Framework 跟踪提供程序包装器

转载 作者:太空狗 更新时间:2023-10-30 00:56:03 25 4
gpt4 key购买 nike

我想对 SQLCE4 数据库使用 Entity Framework 代码优先方法。一切似乎都很好,但我在调试 sql 查询时遇到问题。我发现 EFTracing 来自 http://efwrappers.codeplex.com/应该正是我所需要的,但我不知道如何在没有 app.config 文件的情况下使用它。我不太喜欢这种配置。我只想使用 C# 代码来设置和运行所有内容。我认为使用这样的代码应该没问题:

using (System.Data.Common.DbConnection c = 
new EFTracingProvider.EFTracingConnection(
new System.Data.SqlServerCe.SqlCeConnection(conn)))
{
using (var context = new MyContext(c))
{
var a = from data in context.Projects select data;
}
}

但它不起作用。它抛出异常:

Unable to determine the provider name for connection of type EFTracingProvider.EFTracingConnection'.

有什么简单的方法可以仅在代码中正确创建包装连接吗?

最佳答案

我的问题的解决方案是遵循 DbContext 对象。

public class MyContext : DbContext
{
public MyContext()
: base(CreateConnection("Data Source=file.sdf",
"System.Data.SqlServerCe.4.0"), true)
{ }

public DbSet<Project> Projects { get; set; }

public static bool TraceEnabled = true;

private static DbConnection CreateConnection(string connectionString,
string providerInvariantName)
{
DbConnection connection = null;
if (TraceEnabled)
{
EFTracingProviderConfiguration.RegisterProvider();
EFTracingProviderConfiguration.LogToConsole = true;
string wrapperConnectionString = String.Format(@"wrappedProvider={0};{1}",
providerInvariantName, connectionString);
connection = new EFTracingConnection()
{
ConnectionString = wrapperConnectionString
};
}
else
{
DbProviderFactory factory = DbProviderFactories.GetFactory(providerInvariantName);
connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
}
return connection;
}
}

所以现在我可以只使用上下文,并根据 TraceEnabled 属性自动为包装或未包装的 SqlCe 创建连接。

using (var context = new MyContext())
{
var a = context.Projects.FirstOrDefault();
}

关于c# - 没有配置文件的 Entity Framework 跟踪提供程序包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636182/

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