TLDR:爲什麼實體框架將額外路徑附加到我的數據源的末尾?爲了使用這個框架,我需要做些什麼?有另一種方法來處理這個問題嗎?對代碼優先使用基本實體上下文實體框架
我正在寫一個基本的SQL Server CE winforms程序來存儲一些數據。我原本有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; }
}