Я использую платформу Ado.Net Entity Framework только с кодом (учебное пособие по адресу: блог команды ADO.NET ) и хочу быть максимально независимой от базы данных.
ВМой первый подход - я просто хочу использовать базы данных Sql Express и Sql Compact.С Sql Express все работает нормально, но с Sql Compact я получаю исключение, упомянутое в моем вопросе.
Кто-нибудь знает, можно ли подключиться к Sql Compact с использованием только кода?(с сгенерированным файлом .edmx для базы данных Sql Compact все работает нормально, но я хочу использовать только код!)
Вот код:
Мой класс, который строит 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);