我有两个实体ProductModel和OrderItem . ProductModel具有关系集prodToOrder,inverse orderToProd和one to Many . OrderItem与orderToProd的关系设置为逆prodToOrder和多对一 .
我添加了ProductModel数据没有问题,但我的问题是在我向OrderItem插入新记录然后返回并获取OrderItem,产品名称为null . 如果我同时将两个记录插入到ProductModel和OrderItem它将工作,但我没有添加两个实体,因为我需要选择已有的产品名称并将详细信息添加到OrderItem .
我认为问题在于,除非我同时向两个实体插入记录,否则不会创建关系 .
我在下面的函数中执行新的OrderItem:
- (IBAction)cmdSave:(id)sender {
//Get max productid
NSNumber *orderitemid =[self getMaxOrderItemID];
NSNumber *addValue= [NSNumber numberWithInteger:([orderitemid integerValue] + 1) ];
NSManagedObjectContext *context = [self managedObjectContext];
// Create a new managed object
OrderItem *orderDetails = [NSEntityDescription insertNewObjectForEntityForName:@"OrderItem" inManagedObjectContext:context];
ProductModel *prod =[NSEntityDescription insertNewObjectForEntityForName:@"ProductModel" inManagedObjectContext:context];
orderDetails.order-id=[NSNumber numberWithInteger:[addValue integerValue]];
orderDetails.product-id =[NSNumber numberWithInteger:[product-id integerValue] ];
orderDetails.qty = [NSNumber numberWithInteger:[self.txtQty.text integerValue]];
orderDetails.price =[NSDecimalNumber numberWithDouble:[self.txtPrice.text doubleValue]];
orderDetails.total = [NSDecimalNumber numberWithDouble:[self.txtTotal.text
doubleValue]];
//if i do the following statement it will insert product id to ProductModel entity but i do not want to do that and how do i maintain relationships without inserting in to ProductModel.
*** prod.product-id=[NSNumber numberWithInteger:[product-id integerValue] ];
orderDetails.orderToProd=prod;
***
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}
我很感谢您的帮助或建议 .
2 回答
你还没有掌握对象模型的主要要点 . 你应该忘记所有的ID . 您正在使用外键将实体链接在一起 - 这是错误的方式 . 存在消除这些ID和外键的关系 . 你设定了关系,你就完成了 .
如您所见,这非常简单直接 . 您的部分困惑来自旧的数据库 - 思考左连接心态 . 如果您的具体订单商品属于某个产品型号,则该关系应称为“productModel”,而不是“itemToProd” . 尽可能保持简单的英语 .
顺便说一句,我想指出的其他怪癖很少 . 分配
NSNumber
属性并且您已经从整数中获得NSNumber
时,这就足够了:不
再次检查你的关系 . 产品可以有许多OrderItem,但OrderItem应该只有一个Product . 所以像Product.orderItems这样的东西是To-Many,而反之则是OrderItem.product是To-One .
然后,您应该能够创建所需数量的产品项目
现在要创建OrderItem,请执行以下操作:
没有必要使用
productID
链接OrderItem
和Product
.OrderItem.product
属性直接指向Product
对象 .现在保存更改 - 此时模型将被验证,因此您必须使所有关系正确,否则它将因验证错误而失败 .
要获取产品的所有OrderItem的列表,只需使用
prodA.orderItems
,它返回OrderItems的NSSet .