2014-02-07 3 views
0

TLDR: Почему Entity Framework добавляет дополнительный путь в конец моего источника данных? Что мне нужно сделать, чтобы использовать эту структуру? Есть ли другой способ справиться с этим?Использование базового объекта Контекст для первого кода структуры Entity Framework

Я пишу базовую программу winforms SQL Server CE для хранения некоторых данных. У меня первоначально был 1 контекст, который будет использоваться для взаимодействия с 1 классом. Теперь я хочу добавить еще один класс, и поэтому я реорганизовал базовый контекст, из которого может быть получен исходный контекст. У меня есть код, хотя я не могу создать с ним какую-либо базу данных.

Я беру путь от пользователя к базе данных и устанавливаю | DataDirectory |, который я использую для источника данных.

<add name="MonsterContext" 
    connectionString="Data Source=|DataDirectory|; Persist Security Info=False" 
    providerName="System.Data.SqlServerCe.4.0" /> 

Я намереваюсь для источника данных, чтобы выглядеть как

C:Path\To\DatabaseFile.sdf 

но выходит как

C:\Path\To\DatabaseFile.sdf\Namespace.BaseContext`1[Namespace.ModelClass].sdf ]"} 

Я думаю, что этот путь показывает, что она строит свой собственный источник на основе EF по умолчанию.

Моя база Контекст:

public class EntityContext<T> : DbContext where T : class 
{ 
    public string TableName { get; set; } 

    public EntityContext() 
     : base("name=MonsterContext") 
    { 
    } 

    public EntityContext(string tableName) 
    { 
     this.TableName = tableName; 
    } 

    public DbSet<T> Entities { get; set; } 
} 

И мой производный Контекст:

public class MonsterReader : Reader<Monster> 
{ 
    private List<Monster> monsters; 

    public List<Monster> Monsters 
    { 
     get 
     { 
      if (monsters == null) 
      { 
       monsters = ReadAll(); 
      } 
      return monsters; 
     } 
     private set { monsters = value; } 
    } 

    public MonsterReader(string file) 
     : base(file) 
    { } 

    public MonsterReader(Stream reader) 
     : base(reader) 
    { } 

    public void CreateMonsterDatabase(IEnumerable<Monster> monsters) 
    { 
     CreateDatabase(monsters, TableName); 
    } 

    private string TableName { get; set; } 
} 

ответ

0

В этой задаче, это было простое упущение от базового контекста.

В контексте Base Entity, первый конструктор:

public EntityContext() 
    : base("name=MonsterContext") 
{ 
} 

Однако конструктор, который принимает имя таблицы

public EntityContext(string tableName) 
{ 
    this.TableName = tableName; 
} 

который отсутствует : base("name=MonsterContext")

Этот вызов необходимо, если вы хотите вызвать конкретную строку соединения из app.config. В этом случае строка соединения, которую вы хотите вызвать, представляет собой «Контекст монстра». Без указания контекста Entity Framework по умолчанию использует SQL Server CE до

|DataDirectory|\Namespace.NameofContext.sdf 
Смежные вопросы