Core data Coredata-使用配置管理瞬态实体

Core data Coredata-使用配置管理瞬态实体,core-data,memory,sqlite,entities,transient,Core Data,Memory,Sqlite,Entities,Transient,我尝试使用配置来管理核心数据中的临时实体 首先,我创建了两个名为“持久”和“瞬态”的coredata配置 然后,我创建了实体,并将它们与正确的配置相关联 取决于实体是否可持久化 最后,使用persistentStoreCoordinator,我创建了一个Sqlite类型的持久存储,并将其链接到“持久”配置。我还创建了类型内存的持久存储,并将其链接到“瞬态”配置 测试:我启动iphone模拟器,我的应用程序成功启动。我关闭模拟器,然后 在数据库文件上启动sqlite3。我列出了表(.table

我尝试使用配置来管理核心数据中的临时实体

  • 首先,我创建了两个名为“持久”和“瞬态”的coredata配置
  • 然后,我创建了实体,并将它们与正确的配置相关联 取决于实体是否可持久化
  • 最后,使用persistentStoreCoordinator,我创建了一个Sqlite类型的持久存储,并将其链接到“持久”配置。我还创建了类型内存的持久存储,并将其链接到“瞬态”配置
测试:我启动iphone模拟器,我的应用程序成功启动。我关闭模拟器,然后 在数据库文件上启动sqlite3。我列出了表(.tables命令),我可以看到一些表是为我的瞬态实体=>创建的,因此,它不起作用

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    NSLog(@"++++++++ persistentStoreCoordinator");

    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *persistStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ProjectToDelete.sqlite"];

    NSMutableDictionary *sqliteOptions = [NSMutableDictionary dictionary];
    [sqliteOptions setObject:@"WAL" forKey:@"journal_mode"];

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
                             sqliteOptions, NSSQLitePragmasOption,
                             nil];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"Persistent" URL:persistStoreURL options:options error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:@"Transient" URL:[NSURL URLWithString:@"memory://store"] options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}

我认为您正在混合CoreData的不同概念

CoreData不是ORM,而是管理对象及其关系的对象图

您可以在一个实体上拥有瞬态属性,该属性不会在表示该实体的表中形成列,仅在运行时生成,而对象在内存中


抽象实体绝不意味着要实例化,如果您有许多对象继承自一个超级对象,通常会使用抽象实体,即员工管理系统可能有一个抽象的个人实体,以及员工、经理、主管和经理,所有这些实体都继承自个人,如注释中所述,试图通过模型编辑器配置数据存储是行不通的。这些配置可能允许您添加预先确定的回迁,但不允许您配置数据存储的位置。这是使用这些方法的关键。您需要添加一些代码,如博文中所述,以正确使用这些技术。

此网页介绍了处理瞬态实体的不同方法:但我尝试使用coredata中的配置来实现。您不能仅使用配置。他谈到的关于瞬态实体的概念是在代码中管理的,他在NSManagedObjectContext中创建NSManagedObjects,但从不保存它们。实现这一点还有其他几种方法,但都是在代码中完成的,配置文件中没有。我对其他方法感兴趣,如果你能多谈一点的话。对你来说,什么是最好的方式?