【问题标题】:DbGeography in XamarinXamarin 中的 DbGeography
【发布时间】:2016-09-06 12:30:42
【问题描述】:

我正在为我的数据库使用实体框架。所有实体都存储在引用实体框架的项目中,因为某些对象具有 DbGeography (System.Data.Entity.Spatial) 属性。无法在我的 Xamarin 项目中引用此项目,因为 Mono 中不存在 System.Configuration DLL(来自实体框架引用)。

是否可以在 Xamarin 中使用 DbGeography 属性?

编辑背景信息: 我有一个模型项目,它只包含存储在数据库中的类。此项目引用实体框架,因为某些类具有 DbGeography 属性。另一个项目处理数据库并创建上下文等,以将模型与数据库逻辑分开。这种结构用于许多项目,我通过 Web 服务访问数据库。其中一个项目是 Xamarin 应用程序。这个应用程序应该使用模型项目的一些类。但由于实体框架参考,这是不可能的。我不想在应用程序中使用实体框架。

【问题讨论】:

  • (如果我错了,有人纠正我,但是:) 我相信 Entity Framework 不能在 Xamarin 上运行,因为该框架根本不支持它。您可能想要的是类似于 SQLite 的东西。如果您提供更多关于您实际尝试完成的信息,也许我们可以提出更合适的替代方案?
  • 感谢您的回复!我不想在 Xamarin 中运行实体框架,但我想使用一些具有 DbGeography 属性的类。我在问题中添加了更多信息。

标签: c# database entity-framework xamarin spatial


【解决方案1】:

在阐明您要完成的工作后,这是(可以说)解决您问题的最佳解决方案。

如果您自己制作了模型,请将它们提取到 Shared/PCL 库中并在两个项目中引用它。但由于您使用的是实体框架库中的模型,因此您不能这样做:

您必须在 Xamarin 端创建相同的模型,其中包含与 DbGeography 类类似的属性。这样,当您通过 REST(或您正在使用的任何通信)接收它时,将它们转换为您的自定义类型。

由于 JSON 不保留有关原始对象类型的任何信息(默认情况下,您实际上可以将其配置为这样做,但在这种情况下您希望避免这样做),它应该能够转换所述对象直接到您的“与 Xamarin 兼容的 DbGeography 克隆”类。

我假设您正在使用一种以 JSON 格式传输数据的通信方法。但它也应该适用于 XML 或类似的序列化技术。但是,如果不是,请指定您实际获取(或希望获取)数据库和 Xamarin 应用程序之间的对象的方式

【讨论】:

  • 感谢您的回答。我真的很想避免复制模型,因为它会不时更改。这是我改用 Xamarin 的原因之一。我还考虑过创建相关类的视图,可以对其进行逆向工程以避免手动复制。但是是否有可能在不引用实体框架的情况下使用那些 DbGeography 属性?
  • 你真的需要所有的属性吗?您只能实现您实际使用的属性。从 JSON 映射时,其余部分将被忽略。这样,您至少在一定程度上受到保护,不受服务器更改的影响。
猜你喜欢
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多