无法确定连接类型'System.Data.SqlServerCe.SqlCeConnection'的提供程序名称

时间:2010-05-10 15:52:46

标签: ado.net sql-server-ce

我正在使用Ado.Net实体框架和仅代码(教程:ADO.NET team blog),我想尽可能多地保持数据库独立。

在我的第一种方法中,我只想使用Sql Express和Sql Compact数据库。 使用Sql Express everthing工作正常但使用Sql Compact我得到了我的问题中提到的异常。

有人知道是否可以使用Code Only方法连接到Sql Compact? (生成的.edmx文件用于Sql Compact数据库everthing工作正常,但我只想使用代码!)

以下是一些代码:

构建DataContext的我的类:

public class DataContextBuilder : IDataContextBuilder
{
    private readonly DbProviderFactory _factory;

    public DataContextBuilder(DbProviderFactory factory)
    {
        _factory = factory;
    }

    #region Implementation of IDataContextBuilder

    public IDataContext CreateDataContext(string connectionString)
    {
        var builder = new ContextBuilder<DataContext>();
        RegisterConfiguration(builder);

        var connection = _factory.CreateConnection();
        connection.ConnectionString = connectionString;

        var ctx = builder.Create(connection);

        return ctx;
    }

    #endregion

    private void RegisterConfiguration(ContextBuilder<DataContext> builder)
    {
        builder.Configurations.Add(new PersonConfiguration());
    }
}

该行

  

var ctx = builder.Create(connection);

抛出异常。

IDataContext只是ObjectContext的一个简单接口:

public interface IDataContext
{
    int SaveChanges();

    IObjectSet<Person> PersonSet { get; }
}

我的连接字符串在app.config中配置:

<connectionStrings>
<add name="CompactConnection" connectionString="|DataDirectory|\Test.sdf"
  providerName="System.Data.SqlServerCe.3.5" />
</connectionStrings>

构建操作以

开始
var cn = ConfigurationManager.ConnectionStrings["CompactConnection"];
var factory = DbProviderFactories.GetFactory(cn.ProviderName);
var builder = new DataContextBuilder(factory);
var context = builder.CreateDataContext(cn.ConnectionString);

1 个答案:

答案 0 :(得分:3)

我必须回答我自己的问题。

现在可以使用了 Entity Framework CTP 4

和 SQL Server Compact 4.0