public class EntityFrameworkConfiguration : DbConfiguration
{
public EntityFrameworkConfiguration()
{
this.SetModelCacheKey(ctx => new EntityModelCacheKey((ctx.GetType().FullName + ctx.Database.Connection.ConnectionString).GetHashCode()));
}
}
为了使上面的代码工作,我在 web.config 中添加了以下行
但对于我使用程序集引用的其他项目,我遇到了异常:
{“实体使用了默认的 DbConfiguration 实例
“EntityFrameworkConfiguration”类型之前的框架
发现。必须设置“EntityFrameworkConfiguration”的实例
在应用程序启动时使用任何实体框架功能之前或
必须在应用程序的配置文件中注册。看http://go.microsoft.com/fwlink/?LinkId=260883了解更多信息。”}
您的问题没有说明您如何使用此自定义 DbConfiguration。
您可以通过几种不同的方式获得此错误。
配置风格设置
如此处所述:实体框架配置文件设置
配置为代码
如此处所述:实体框架基于代码的配置(EF6 及以上版本)你可以hack
通过执行 DbConfiguration.SetConfiguration(xxxx) 等操作来实现这种风格。我发现这根本没有用。
这实际上取决于您如何构建 DbContext。
配置文件样式构造函数
https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs#L75不带参数 - EF6 使用配置文件来确定要使用的正确 DbConfiguration
再次使用一些“类似连接字符串”的参数 EF6 使用配置文件来确定 DbConfiguration
没有配置,或者配置错误 - 你会得到这种类型或异常
配置为代码风格构造函数
https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs#L139
我认为这会产生更好的控制。
指定您的 DbContext,然后使用手动创建的 DbConnection
public class EntityFrameworkConfiguration : DbConfiguration
{
public EntityFrameworkConfiguration()
{
this.SetModelCacheKey(ctx => new EntityModelCacheKey((ctx.GetType().FullName + ctx.Database.Connection.ConnectionString).GetHashCode()));
}
}
[DbConfigurationType(typeof(EntityFrameworkConfiguration))]
public class MyContext : DbContext
{
public MyContext(DbConnection existingConnection, bool contextOwnsConnection)
: base(existingConnection, contextOwnsConnection)
{ }
public DbSet<Stuff> Stuff { get; set; }
}
using(var conn = new SqlConnection(asqlserverConnectionString))
using (var db = new MyContext(conn, true))
{
var value = await db.Stuff.Where(s => s.xxx.Equals(primaryKey)).Select(s => new { s.BinaryContent } ).SingleOrDefaultAsync();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)