2015-02-06 133 views
0

我真的很感謝任何人都可以提供的見解。EF6.1升級問題:SQL Server CE文件位置和[NotMapped]屬性

我回到了一個使用EF6.0 RC預覽的項目。在將項目EF更新到6.1並更新SQL Server CE之後,我有兩個問題。

[UPDATE] 問題1 & 2解決問題3是不

問題3 - 現在與路徑通過連接字符串中設置如上所述,通過遷移包管理器叫做不工作作爲一個無效的路徑。任何想法的人?

當我啓動調試過程時,出現問題1和異常崩潰;但它確實創造.sdf文件雖然在錯誤的位置,如問題解釋2

1.沒有映射BY LINQ錯誤

財產和不支持在最初的創作過程中,我得到一個異常

List<Equipment> duplicateTags = db.EquipmentReg 
       .GroupBy(e => e.TagAndLocation) 
       .Where(g => g.Count() > 1) 
       .SelectMany(g => g).ToList<Equipment>(); 

例外與TagAndLocation有關。 TagAndLocation在模型中通過

/// <summary> 
/// Creates concatenation object that will not be mapped in the database but will be in the 
/// Object Relational Mapping (ORM) of the EF model. 
/// </summary> 
[NotMapped] 
public string TagAndLocation { get { return Tag + " (" + Location.Name + ")"; } } 

「System.NotSupportedException」類型的第一次機會異常發生在EntityFramework.dll定義
其他信息:指定的類型成員「TagAndLocation」是 在LINQ不支持到實體。只支持初始值設定項,實體成員, 和實體導航屬性。

爲什麼現在發生這種情況?

2.連接字符串不適用LOCATION

我的連接沒有應用路徑正確了。

我有它自動運行的DbConfiguration類,我猜是由於它的繼承類類型。如圖所示相反在運行位置...\bin\Debug\Databases\Hazardous_Area_Database_Job.sdf創建文件下面

class HAIDbJob_EFConfiguration : DbConfiguration 
{ 
    public HAIDbJob_EFConfiguration() 
    { 
     SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance); 

     // Create the connection string programmatically - Setting the filename and path. 
     SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlCeConnectionFactory(
       "System.Data.SqlServerCe.4.0", 
       System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases"), 
       @"Data Source=" + System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases") + 
       @"\Hazardous_Area_Database_Job.sdf")); 
    } 
} 

,它在 ..\bin\Debug\HA_Inspector.HAI_Database.HAI_Job_EF_Model.Hazardous_Area_Database_Job.sdf

也就是數據庫模型的完整的命名空間創建它......我試圖找到幾個解決方案對於其他人的性質略有不同的問題,但沒有一個能起作用。任何想法都將非常感激。

回答

0

1:EF提供程序嘗試將TagAndLocation轉換爲SQL並失敗。你必須使用LINQ to Objects來進行分組。

2:爲什麼在您的應用程序中沒有命名的連接字符串。config,或者在DbContext構造函數中傳遞它。

+0

謝謝埃裏克,你把我放在正確的道路上。 – Asvaldr 2015-02-08 23:58:48

+0

有沒有什麼辦法可以在運行時以編程方式更改數據庫名稱和文件路徑? – Asvaldr 2015-02-09 00:04:23

+0

當然 - http://erikej.blogspot.dk/2013/10/sql-server-compact-4-desktop-app-with.html(最後部分) – ErikEJ 2015-02-09 07:31:26

0

解決方案1 ​​ 我做了一個字符串比較在組通過語句,因爲位置有一個字符串成員Location.Name。

解決方案2 當我最初寫這個我想動態命名數據庫所有的時間,這就是爲什麼我寫的初始化器類。 爲了解決這個問題,我只是遵循Erik的建議,並在app.config中使用「Source = ./ Databases」來放置一個XAML連接字符串.....以獲取子文件夾。

+0

**問題3 - ** 現在設置路徑通過上面解釋的連接字符串,通過包管理器調用的遷移不起作爲其無效路徑。任何想法的人? – Asvaldr 2015-02-09 03:47:21