没有配置文件的Entity Framework 6?

11

我有一个应用程序,无法使用配置文件,并且必须通过代码(使用EntityConnectionStringBuilder)设置实体上下文的连接字符串。

问题在于:

找不到ADO.NET提供程序'invariant name'为'System.Data.SqlClient'的Entity Framework提供程序。

由于我无法使用标准的app.config文件,在EF6中是否无法解决?如果我没记错的话,在EF4中没有这个问题。因此,我希望在代码中设置entityFramework-tag中的设置。

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
2个回答

14
我完全没有使用App.config文件,只是将连接字符串传递给我的DBContext(连接字符串在其他地方从配置文件中读取,但这取决于你)。只需从配置文件中删除所有EF相关的内容。下面是我让它运行起来的方法。
public partial class MyDbContext : DbContext, IMyDbContext
{
    public MyDbContext(string connectionString,
                                         DbValidationMode validationMode = DbValidationMode.Enabled,
                                         DbLazyLoadingMode lazyLoadingMode = DbLazyLoadingMode.Disabled,
                                         DbAutoDetectMode autoDetectMode = DbAutoDetectMode.Enabled)
            : base(((EntityConnectionStringBuilder)new EntityConnectionStringBuilder()
            {
                Provider = "System.Data.SqlClient",
                ProviderConnectionString = connectionString,
                Metadata = @"res://*/Contexts.Test.MyModel.csdl|res://*/Contexts.Test.MyModel.ssdl|res://*/Contexts.Test.MyModel.msl"
            }).ToString())
            { 
                    this.Configuration.ValidateOnSaveEnabled = validationMode.Equals(DbValidationMode.Enabled);
                    this.Configuration.LazyLoadingEnabled = lazyLoadingMode.Equals(DbLazyLoadingMode.Enabled);
                    this.Configuration.AutoDetectChangesEnabled = autoDetectMode.Equals(DbAutoDetectMode.Enabled);
            }
... Etc  

然后我只需将此上下文注入到我所有的服务中。

我正在使用数据库优先设计,因此我发现修改T4模板更容易。

可能有更好的方法来做这件事,但我没有遇到任何问题。


1
我遇到的问题是我没有包含EntityFramework.SQLServer.dll。尽管它很好地回答了问题本身(我自己也是这样做的),但我将其标记为答案。 - Jens
元数据属性是什么?你怎么知道要分配的值? - IAbstract

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接