EntityFramework 6基于代码的数据库优先连接字符串配置 - c#

我正在尝试在没有app.config的情况下使现有应用程序正常工作(由于环境非常具体,因此需要使用它)。问题在于它在很大程度上依赖EntityFramework 6与SQL Server一起工作。

我正在尝试使用code-based configuration,但无法弄清楚如何通过配置类提供正确的连接字符串。

我做了一个配置类:

public class MyConfiguration : DbConfiguration
{
    public MyConfiguration()
    {
        SetDefaultConnectionFactory(new MyConnectionFactory());
        SetProviderServices("System.Data.SqlClient", System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
}

然后将其提供给我的DbContext(由EF从bd自动生成):

[DbConfigurationType(typeof(MyConfiguration))]
public partial class TestModelEntities
{           
}

使用自定义连接工厂:

public class MyConnectionFactory : IDbConnectionFactory
{
    public DbConnection CreateConnection(string nameOrConnectionString)
    {
        var newConnStringBuilder = new SqlConnectionStringBuilder
        {
            UserID = "user",
            Password = "pass",
            InitialCatalog = "databaseName",
            DataSource = "serverName"
        };

        var entityConnectionBuilder = new EntityConnectionStringBuilder
        {
            Provider = "System.Data.SqlClient",
            ProviderConnectionString = newConnStringBuilder.ToString(),
            Metadata = @"res://*/TestModel.csdl|
                            res://*/TestModel.ssdl|
                            res://*/TestModel.msl"
        };

        var newDbConnect = new EntityConnection(entityConnectionBuilder.ToString());
        return newDbConnect;
    }
}

然而。测试时,我得到一个UnintentionalCodeFirstException。为什么?我想念什么?

参考方案

您应该通过:base(connectionString)为您的上下文提供连接字符串。创建一个如下的类:

public class ConnectionStringBuilder
{
    public static string Construct()
    {
        var newConnStringBuilder = new SqlConnectionStringBuilder
        {
            UserID = "user",
            Password = "pass",
            InitialCatalog = "databaseName",
            DataSource = "serverName"
        };

        var entityConnectionBuilder = new EntityConnectionStringBuilder
        {
            Provider = "System.Data.SqlClient",
            ProviderConnectionString = newConnStringBuilder.ToString(),
            Metadata = @"res://*/TestModel.csdl|
                            res://*/TestModel.ssdl|
                            res://*/TestModel.msl"
        };

        return entityConnectionBuilder.ToString();
    }
}

然后将您的Context构造函数修改为如下所示:

public DbContext()
    : base(ConnectionStringBuilder.Construct())
{
}

现在应该可以正常工作了。 (source)

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

使用代码优先重命名EF中的列 - c#

我在班上改名了。看起来像这样。public class clsClassForStackoverflow { [Column(TypeName = "varchar"), StringLength(150)] public string Name { get; set; } 由于结构上的更改,我不得不将其重命名。因此,我删除了该行并添加了…

Compact Framework-如何在没有默认构造函数的情况下动态创建类型? - c#

我正在使用.NET CF 3.5。我要创建的类型没有默认的构造函数,因此我想将字符串传递给重载的构造函数。我该怎么做呢?码:Assembly a = Assembly.LoadFrom("my.dll"); Type t = a.GetType("type info here"); // All ok so far, …

如何在实体框架代码优先迁移中设置小数精度和小数位数 - c#

我正在使用实体框架迁移,并且需要设置实体中十进制属性的精度和小数位数。我只想对此单个十进制属性(而不是所有十进制属性)执行此操作。我已经重写了OnModelCreating方法,以默认将小数设置为(18,2)。我需要此属性为(22,5)。例如public class AdditionalCharge { public decimal? Rate { get;…