2

我正在尝试将我的 WP 应用程序移植到 Windows 8,同时维护可移植模型和视图模型类。但是,我的应用程序使用 SQLCE for Windows Phone 7,因此我的原始模型类都装饰有用于映射到 SQLCE 表的属性。由于 SQLCE 不适用于 WinRT 应用程序,我想抽象数据访问,以便我可以继续在手机上使用 SQLCE,但在 Windows 8 上使用 SQLite。

有没有人想出一个理智的、工作的抽象层,它不会消除使用的能力IQueryable?同样,任何人都成功地在 Windows Phone 上为 SQLCE 使用 XML 映射而不是属性映射?如果我不必在模型类和 DAL 类似物之间手动转换,那就太好了。

(我在博客上对此有点抱怨,这可能有助于为我的问题提供更多背景信息。)

4

1 回答 1

1

我已经确定为可移植代码(视图模型、帮助程序等)提供每个平台的“核心”程序集,以及平台特定的核心程序集引用的每个数据库/后备存储(SqlCe、Sqlite 等)的单独程序集似乎工作。这意味着我的模型类仍然在 DAL 程序集中定义,但我至少可以提供一个简单的通用接口(不幸的是,由于 DAL 模型类,在每个 DAL 程序集中定义)仍然为我提供 IQueryable 支持。

由于 Visual Studio 中的“复制为链接”,设置核心程序集并确保每个 DAL 程序集的公共数据库服务接口相同非常容易。我#ifdef什至可以重用许多 DAL 模型类文件并有条件地编译属性、特定于数据库的代码等,这使我也可以为它们使用“复制为链接”。

public interface IDataService
{
    IQueryable<ModelType1> ModelType1 { get; }
    IQueryable<ModelType2> ModelType2 { get; }

    void AddModelType1(ModelType1 item);
    void RemoveModelType1(ModelType1 item);

    void AddModelType2(ModelType2 item);
    void RemoveModelType2(ModelType2 item);

    void CreateDatabase();
    void ResetDatabase();
}

生成的引用映射有点像这样:

System.Data.Linq -> App.Data.SqlCe -> App.Core.WP -> App.WP
                        /                /
             (some shared code)  (all shared code)
                      /                /
Sqlite -> App.Data.Sqlite -> App.Core.Win8 -> App.Win8

它远没有我想要的那么干净,但至少它似乎有效。

于 2013-04-11T17:08:30.870 回答