`
dcj3sjt126com
  • 浏览: 1871709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Core Data浅谈系列之九 : 使用Mapping Model

    博客分类:
  • IOS
阅读更多

通常,我们都会尽量使数据模型的变化尽量简单。但有些情况下,不得不进行大的改动,甚至是重新设计数据模型。在这种情况下,之前提过的简单数据迁移已经无法适应了,需要引入Mapping Model这个中间层。

这时,又想起之前提过的一句话:
 
There is no problem in computer science that can’t be solved by adding another level of indirection.
 
这里做一个简单的变动,先为球员增加薪水属性: 
 
 
然后创建一名球员,信息如下:
 
 
这时候我们打算为球员调薪,比如上涨10%。为了结合NSMappingModel,这里简单地增加了一个新的属性newSalary,并且希望在数据迁移时更新该属性。为此,我们创建了一个NSMappingModel映射模型:
 
 
 
 
选择好源数据模型和目标数据模型,设置newSalary和salary的关系:
 
 
这表示目标属性newSalary的值为源属性salary的1.1倍。
 
这个时候,我们不希望Core Data自动为我们映射模型,所以修改一下迁移选项: 
  1. NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:  
  2. [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,  
  3. [NSNumber numberWithBool:NO], NSInferMappingModelAutomaticallyOption, nil];  
把NSInferMappingModelAutomaticallyOption设置为NO后,我们需要手工指定映射模型:
  1. NSString *mappingModelPath = [[NSBundle mainBundle] pathForResource:@"mappingModel3to4" ofType:@"cdm"];  
  2. NSURL *mappingModelUrl = [NSURL fileURLWithPath:mappingModelPath];  
  3. NSMappingModel *mappingModel = [[[NSMappingModel alloc] initWithContentsOfURL:mappingModelUrl] autorelease];  
接着,进行实质性的数据迁移。简单起见,这里就没有做错误检查了:
  1. NSMigrationManager *migrationManager = [[[NSMigrationManager alloc] initWithSourceModel:sourceModel destinationModel:destinationModel] autorelease];  
  2.   
  3. if (![migrationManager migrateStoreFromURL:storeURL type:NSSQLiteStoreType options:nil withMappingModel:mappingModel  toDestinationURL:tmpStoreURL destinationType:NSSQLiteStoreType destinationOptions:nil error:&error]) {  
  4.     NSLog(@"Error migrating %@, %@", error, [error userInfo]);  
  5.     abort();  
  6. }  
  7.   
  8. NSFileManager *fileManager = [NSFileManager defaultManager];  
  9. NSString *oldStoreName = @"cdNBA_old.sqlite";  
  10. NSURL *oldStoreURL = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:oldStoreName]];  
  11. [fileManager moveItemAtURL:storeURL toURL:oldStoreURL error:&error];  
  12. [fileManager moveItemAtURL:tmpStoreURL toURL:storeURL error:&error];  
再跑一遍Demo,然后在终端里查看:



可以发现有一份旧的sqlite文件和一份新的。
通过查看新的sqlite文件中的数据,可以得知newSalary的值: 
 
其中,newSalary为2420000.0,刚好是salary的值2200000.0的1.1倍。
分享到:
评论

相关推荐

    Pro Entity Framework Core 2 for ASP.NET Core MVC

    Model, map, and access data effectively with Entity Framework Core 2, the latest evolution of Microsoft’s object-relational mapping framework that allows developers to access data using .NET objects,...

    Mybatis-Generator自动生成Dao、Model、Mapping相关文件

    Mybatis-Generator是一款强大的自动化工具,它可以帮助Java开发者自动生成Mybatis的相关代码,包括DAO(Data Access Object)、Model以及Mapper XML映射文件。这极大地提高了开发效率,减少了手动编写重复代码的时间...

    关于大数据量下Core Data的数据迁移 - JasonLee的专栏 - 博客频道 - CSDN.NET1

    在iOS开发中,Core Data是苹果提供的一种强大的数据管理框架,用于处理应用程序中的对象图和持久化存储。当面临大数据量时,数据迁移成为一个关键问题,因为错误的迁移策略可能导致性能下降甚至数据丢失。本文主要...

    ASP.NET Core 实战

    * Chapter 12: Saving data with Entity Framework Core 这些章节将指导读者如何构建完整的应用程序,包括依赖注入、服务注册、应用程序配置和数据存储等方面。 Part 3 Generating_HTML_with_Razor_Pages_and_MVC...

    net ef core 详细官方中文教程

    EntityFrameworkCore(简称EF Core)是微软推出的一款轻量级的对象关系映射(Object/Relational Mapping,简称ORM)框架,它是EntityFramework(简称EF)的跨平台版本,用于.NET平台。EF Core是.NET Core的一部分,...

    ios-coredata的应用

    本文将深入探讨Core Data在实际应用中的使用,以及如何进行数据模型的升级。 Core Data并非一个传统的SQL数据库,而是面向对象的数据管理系统,它提供了数据建模、存储、检索以及对象关系映射的功能。它的核心概念...

    EF Core 官方指南.pdf

    - **数据模型(Data Model)**: 包括实体、属性、关系等,定义了数据库的结构。 2. **数据库迁移(Database Migrations)** - EF Core提供了一种方便的数据库版本控制机制,通过添加、删除和更新迁移文件来跟踪...

    mybatis-generator-core

    它能够根据数据库中的表结构自动生成Java源代码,包括DAO(Data Access Object)、Model对象以及Mapper映射文件。这极大地提高了开发效率,减少了手动编写重复代码的工作量。 在标题"Mybatis-generator-core"中,...

    spring教程,spring入门

    - **Data Access/Integration**:如JDBC、ORM(Object-Relational Mapping)模块,支持与各种数据库的交互。 - **Web**:Web-Servlet模块为基于Servlet的Web应用提供支持,Web-MVC模块则提供了Model-View-...

    Core Software Security: Security at the Source

    Mapping the Security Development Lifecycle to the Software Development Lifecycle Software Development Methodologies Waterfall Development Agile Development Chapter Summary References Security ...

    iOS App开发中Core Data框架基本的数据管理功能小结

    Core Data通过ORM(Object-Relational Mapping)技术将这些实体映射到Objective-C或Swift的对象上,使得开发者可以直接操作对象而不是SQL语句。 设计数据模型是使用Core Data的第一步。在iOS开发中,我们可以通过...

    VS.NET开源框架

    iBatis.NET 是另一种 .NET 持久层框架,它同样是从 Java 上的 iBatis 移植而来的 o/rmapping 框架,它包括 DataMapping 和 DataAccess 两部分: DataMapping:ORM 的实现部分,对象映射通过映射文件来定义,支持 ...

    Mayavi 参考

    Scenes, data sources, and visualization modules: the pipeline model Loading data into Mayavi Installation Installing ready-made distributions Requirements for manual installs Doing it yourself: ...

    Spring框架所需基本jar包

    在使用Spring进行开发时,需要依赖一系列的jar包来支持其核心功能和服务。下面将详细阐述这些jar包的作用及其在Spring框架中的重要性。 1. **Spring Core Container**: - `spring-core.jar`: 核心模块,提供了IoC...

    Spring 所有jar包

    3. **Data Access/Integration**:这部分包括对数据库操作的支持,如ORM(Object-Relational Mapping)和JDBC。涉及的jar包有: - `spring-jdbc.jar`:提供对JDBC的抽象层,简化数据库访问。 - `spring-tx.jar`:...

    5分钟利用Myeclipse快速搭建ssh(JPA)环境,自动生成dao,model

    本篇文章将详细介绍如何使用MyEclipse集成开发环境在五分钟内快速搭建SSH(Spring、Struts2、Hibernate)结合JPA技术的应用环境,并自动生成DAO(Data Access Object)层与Model(数据模型)。通过这一过程,我们将...

    SAP PI Handbook 71

    - **Operation Mapping**: Mapping operations that define how data is transformed between different structures. - **Message Mapping (Graphical Mapping Editor)**: Using the graphical editor to create and...

    spring框架,技术详解及使用指导

    Spring框架是Java开发领域中最广泛使用的轻量级框架之一,以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)能力而著称。本文将深入探讨Spring框架的核心...

Global site tag (gtag.js) - Google Analytics