Entity Framework - ключевое слово не поддерживается: «метаданные» - PullRequest
1 голос
/ 11 сентября 2011

У меня есть следующий класс:

public class EFRepository<TContext> : IDisposable where TContext : DbContext, IObjectContextAdapter, new()
{
    private TContext context;

    public EFRepository(string connectionStringName)
    {
        context = new TContext();
        context.Database.Connection.ConnectionString =
            ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
    }
}

со следующей строкой подключения:

<connectionStrings>
    <add name="EntitiesConnection" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=Bob-PC;initial catalog=Entities;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

  </connectionStrings>

Меня зовут так:

var Entities = new EFRepository<EntitiesConnection>("EntitiesConnection");

Что выдает ошибку в строке темы. Я видел решения, использующие EntityStringBuilder, однако свойство Connection доступно только для чтения. Любые идеи о том, как сделать эту работу?

Спасибо,

Bob

1 Ответ

3 голосов
/ 11 сентября 2011

DbContext уже имеет конструктор, который принимает строку подключения или имя. Можете ли вы изменить существующие классы контекста для включения конструктора, который принимает параметр строки подключения и вызывает base(connectionStringOrName)?

Таким образом, контекст будет выглядеть примерно так:

public class SomeContext : DbContext, IObjectContextAdapter
{
    public SomeContext(string connectionStringOrName)
        : base (connectionStringOrName)
    {
    }

    // Rest of the implementation...
}

И тогда конструктор EFRepository<TContext> будет выглядеть так:

public EFRepository(string connectionStringName)
{
    context = new TContext(connectionStringName);
}
...