按ID引用Realm.io FK对象

时间:2016-04-28 14:57:36

标签: android sql-server xamarin xamarin.android realm

我试图在Android中创建一个与SQL Server中的一个相同的Realm数据库。我们的想法是定期更新Android上的那个,以便两者都有相同的数据。

为了简单起见,我们假设我有三个表:对象,颜色,形状。我的主表Object具有以下形式:

ID      |  int
------------------
Name    |  string
------------------
IDColor |  int
------------------
IDShape |  int

其中IDColor和IDShape引用颜色和形状表。这两者的内容并不重要。

我想做的是在Android上定义类似的内容:

public class MyObject extends RealmObject {
    @Required
    private String name;
    private Color color;
    private Shape shape;
}

这样我可以直接引用MyObject.color和MyObject.shape。但是,这样AFAIK我不能通过ID来指定颜色和形状,因此realm.copyToRealmOrUpdate不会起作用。

是否有替代方案允许我直接导入我的JSON(理想)或经过一些预处理或后处理?

由于

编辑:我找到了一种使用Xamarin做类似事情的方法。请参阅下面的答案。

2 个答案:

答案 0 :(得分:1)

Realm是一个对象数据库,因此在这种情况下,独立导入3个表并不能真正起作用。您需要进行一些设置对象结构的预处理。

您可以通过将输入数据转换为JSONObject并使用realm.createOrUpdateFromJsonObject()方法来完成此操作。这与copyToRealmOrUpdate的行为类似,但它直接适用于JSON。

伪代码:

JSONObject obj = new JSONObject(myObjectJson);
obj.put("color", getColorJson(obj.getInt("IDColor")));
realm.creteOrUpdateFromJSonObject(obj);

答案 1 :(得分:1)

我不再使用“vanilla Android”,但我发现可以按照我在Xamarin的原始问题做我想要的事情,如下所示:

{{1}}

Realm会忽略任何自定义getter和setter,因此对象不会保留在数据库中。这是我发现在Realm中复制传统SQL数据库的FK行为的最简单方法。