2012-01-06 97 views
0

我在我的应用程序中设置了核心数据,包含两个实体:餐厅和菜单。有大约30个餐馆和6个菜单。一个菜单可以属于几家餐馆。如何通过menuId获取餐厅?

但是,每个Restaurant实体都有一个menuId字段。有没有办法根据Restaurant实体拥有哪个menuId来检索特定的菜单实体?

我也有一个问题,值被存储不止一次,即使它们是相同的。我怎样才能防止这种情况发生?

我对核心数据很新,所以任何最佳实践提示将不胜感激!

谢谢!

+1

请记住,核心数据不是数据库。这是一个可以持久化的对象图。 – 2012-01-06 15:13:34

回答

1

你可以使用一个NSFetchRequest通过它们的ID来检索菜单,但它实际上将是更好的定义从您的餐厅实体关系到你的菜单实体(反之亦然)。在内部,它与你的菜单id属性几乎完全相同,但使用起来更加方便。

0

您正在遵循数据库方法,基于表和ID来链接这些表。这在Core Data中是错误的,您必须遵循对象图方法,并且CoreData会以对您完全透明的方式将其转换为相应的SQlite数据库。

因此,在实体“餐厅”和“菜单”中,您将创建: - 在实体“餐厅”中与“菜单”的一对多关系称为“菜单” - 与“Restaurant”的一对多关系称为“餐馆”

您只需将每个餐馆菜单添加到与给定菜单的菜单关系相对应的NSSet,反之亦然。这样你就不需要关心ID,而只需关心对象关系。

就重复的数据而言,这取决于你。通常情况下,你应该有一种方法来确定一个对象的唯一性t(例如:菜单名称,餐厅名称),然后尝试从核心数据中检索它,然后将其作为新对象添加。