Я успешно сопоставил модель данных Entity Framework Code-First с существующей базой данных Sql Server Compact с помощью декларативного подхода с использованием app.config
, но было бы замечательно, если бы я мог построить такое соединение программно свозможно помощь класса EntityConnectionStringBuilder
(System.Data.EntityClient).К сожалению, этот подход не работает, так как [DbContext].Connection.ConnectionString
не принимает большинство его свойств.
Вот фактический рабочий код с закомментированным ошибочным:
Book.cs
public class Book
{
[Key]
public string Isbn { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Publisher { get; set; }
public DateTime Published { get; set; }
public int Pages { get; set; }
public bool InStock { get; set; }
public string Description { get; set; }
}
Catalog.cs
public class Catalog : DbContext
{
public DbSet<Book> Books { get; set; }
}
app.config
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add
name="Catalog"
providerName="System.Data.SqlServerCE.4.0"
connectionString="Data Source=res/Catalog.sdf"
/>
</connectionStrings>
</configuration>
Main ()
static void Main()
{
// var res = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "res");
// var str = new EntityConnectionStringBuilder();
// str.Name = "Catalog";
// str.Provider = "System.Data.SqlServerCe.4.0";
// str.ProviderConnectionString = String.Format("Data Source {0}", Path.Combine(res, "Catalog.sdf"));
try
{
using (var catalog = new Catalog())
{
// catalog.Database.Connection.ConnectionString = str.ConnectionString;
// remaining code not relevant - skipped
Я пытался использовать другие классы построителя, такие как SqlCeConnectionStringBuilder
(System.Data.SqlServerCe), SqlConnectionStringBuilder
(System.Data.SqlClient) и даже DbConnectionStringBuilder
(System.Data.Common), но, похоже, ни один из них не соответствует ожидаемому [DbContext].Connection.ConnectionString
.
Должен ли я заключить, что для этого нет программного способа?Любой совет обязательно будет оценен.Большое спасибо за ваши вклады.