gpt4 book ai didi

database - Windows Phone 和 Windows 8 现代应用程序的数据层抽象?

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:58 24 4
gpt4 key购买 nike

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

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

(我的博客上有一个关于此的 bit of a rant,这可能有助于提供有关我的问题的更多背景信息。)

最佳答案

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

感谢 Visual Studio 中的“复制为链接”,设置核心程序集并确保公共(public)数据库服务接口(interface)对于每个 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

它远没有我想要的那么干净,但至少它看起来可以工作。

关于database - Windows Phone 和 Windows 8 现代应用程序的数据层抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15768669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com