在WP7.1和WPF应用程序之间共享Linq到SQL DataContext?

时间:2011-11-01 23:50:34

标签: wpf windows-phone-7

我已经构建了一个使用本地数据库的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

这在ViewModel中使用它可以正常工作。

  

context = new BirdsnBflysDC(“DataSource ='isostore:BirdsnBflys.sdf'”);`

我现在正试图与WPF应用程序“共享”Model和ViewModel代码。最初,我添加了相应的文件作为WPF项目的链接。创建上下文的实例不起作用,因为测试我只将数据上下文代码添加到WPF项目,并尝试在Loaded事件处理程序中创建上下文的实例,如下所示。

  

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

代码实际上具有数据库的完整路径。当我在调试器中逐步执行此操作时,数据上下文中的上下文初始化退出运行,就好像存在异常一样,上面的第二行代码永远不会到达,并且WPF窗口显示为正确完成事情。

我在DataSource字符串中尝试了几种变体,包括“| DataDirectory | \\ BirdsnBflys.sdf”都具有相同的结果。

有关于此的具体建议吗?如何弄清楚什么不能正常工作?

谢谢, 戴夫

2 个答案:

答案 0 :(得分:1)

问题是连接字符串中的预期对于两种环境是不同的。

WP7适用于此。

  

context = new BirdsnBflysDC(“DataSource ='isostore:BirdsnBflys.sdf'”);

WPF适用于此。

  

context = new BirdsnBflysDC(“| DataDirectory | \ BirdsnBflys.sdf”);

如果您为WPF提供不存在的文件名,则不会收到任何错误信息,数据上下文的实例化会安静地失败,并且不会执行任何其他代码。

戴夫

答案 1 :(得分: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可能需要它们。 希望这会有所帮助。