nhibernate - sproutcore:如何只检索引用ID而不加载引用/关系?

时间:2010-10-11 09:21:59

标签: nhibernate fluent-nhibernate linq-to-nhibernate sproutcore

我用作前端sproutcore,后端是一个nhibernate驱动的openrasta REST解决方案。

在sproutcore中,引用是实际的ID / guid。因此,Sproutcore模型中的Address实体可以是:

// sproutcore code

App.Address = App.Base.extend(

street: SC.Record.attr(String, { defaultValue: "" }),

houseNumber: SC.Record.attr(String),

city: SC.Record.toOne('Funda.City')

);

带有测试数据:

Funda.Address.FIXTURES = [

1 个答案:

答案 0 :(得分:0)

作为你写的笔记你做到了这个

myAddress.Get("city").MyCityName

什么时候应该

myAddress.get("city").get("MyCityName")

myAddress.getPath("city.MyCityName")

有了这个,我认为你的问题是“如何在我想要之前加载城市对象?”。

假设您使用的是数据源,则需要在请求城市对象时管理数据源。因此,在数据源的retrieveRecord中,不要触发请求,并使用适当的参数调用dataSourceDidComplete(查看datasource.js文件),以便城市记录不在{{1}中国家。您基本上是在告诉商店已加载记录,但是您传递了一个空哈希,因此该记录没有数据。

当然,问题是在某些时候你需要检索记录。您可以定义全局内容BUSY,而App.WANTS_CITY只能在您想要城市时进行检索。您需要管理该触发器的值; statecharts是一个很好的地方。

你问题的另一部分是“如何一次加载一堆记录,而不是每条记录都有一个请求?

注意数据源有方法retrieveRecords。您可以为此方法定义自己的实现,这将允许您获取所需的任何记录 - 避免N个子记录的N个请求 - 您可以在一个请求中完成所有这些。

最后,就个人而言,我倾向于使用类似

的方法编写API层

retrieveRecordsgetAddress

并在我真正想要对象时适当地调用我的API。这种方法的一部分是我有一个非常轻量级的数据源 - 我基本上取决于我的API层处理的所有create / update / fetch方法。我使用getCity和相关方法来更新商店。

我这样做是因为商店以非常严格的方式使用数据源。我喜欢更多的灵活性;并非所有服务器API都以相同的方式工作。