2011-11-01 93 views
1

我已經構建了一個使用本地數據庫的WP7.1應用程序。按照這篇文章,我使用sqlmetal來生成數據上下文。 http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2011/05/24/windows-phone-mango-what-s-new-local-database-part-1-of-8.aspx在WP7.1和WPF應用程序之間共享Linq到SQL DataContext?

這在預期在ViewModel中使用這種方式。

上下文=新BirdsnBflysDC( 「數據源= 'isostore:BirdsnBflys.sdf'」);`

我現在嘗試與WPF應用程序 「共享」 的模型和視圖模型的代碼。最初,我添加了適當的文件作爲WPF項目的鏈接。創建上下文的實例不起作用,因此,我只將數據上下文代碼添加到WPF項目,並嘗試在Loaded事件處理程序中創建上下文的實例,如下所示。

BirdsnBflysDC context = new BirdsnBflysDC(「DataSource ='C:\ BirdsnBflys.sdf'」);
DataContext = context;

該代碼實際上具有完整的數據庫路徑。當我在調試器中逐步完成此操作時,數據上下文中的上下文初始化就像有異常一樣退出運行,上面的第二行代碼永遠不會到達,WPF窗口將顯示爲正常完成。

我試過DataSource字符串中的幾個變體,包括「| DataDirectory | \\ BirdsnBflys.sdf」都具有相同的結果。

任何建議作爲該去哪裏?如何找出哪些工作不正常?

謝謝, 戴夫

回答

1

問題是,對於這兩種環境,連接字符串中預期的內容是不同的。

WP7適用於此。

context = new BirdsnBflysDC(「DataSource ='isostore:BirdsnBflys.sdf'」);

WPF適用於此。

context = new BirdsnBflysDC(「| DataDirectory | \ BirdsnBflys.sdf」);

如果您給WPF一個不存在的錯誤信息,那麼數據上下文的實例化將失敗並且不會執行任何其他代碼。

Dave

0

你刪除從產生的CS文件中的2種方法?我的意思是芒果不支持的方法。

public ExternalDB(System.Data.IDbConnection connection) : 
    base(connection, mappingSource) 
{ 
    OnCreated(); 
} 

public ExternalDB(System.Data.IDbConnection connection, 
System.Data.Linq.Mapping.MappingSource mappingSource) : 
    base(connection, mappingSource) 
{ 
    OnCreated(); 
} 

我不確定這一點,但他們可能需要wpf。 希望這有助於。

+0

是的,我試過了。 – DaveS

相關問題