通常,我们都会尽量使数据模型的变化尽量简单。但有些情况下,不得不进行大的改动,甚至是重新设计数据模型。在这种情况下,之前提过的简单数据迁移已经无法适应了,需要引入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自动为我们映射模型,所以修改一下迁移选项:
- NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
- [NSNumber numberWithBool:NO], NSInferMappingModelAutomaticallyOption, nil];
- NSString *mappingModelPath = [[NSBundle mainBundle] pathForResource:@"mappingModel3to4" ofType:@"cdm"];
- NSURL *mappingModelUrl = [NSURL fileURLWithPath:mappingModelPath];
- NSMappingModel *mappingModel = [[[NSMappingModel alloc] initWithContentsOfURL:mappingModelUrl] autorelease];
- NSMigrationManager *migrationManager = [[[NSMigrationManager alloc] initWithSourceModel:sourceModel destinationModel:destinationModel] autorelease];
- if (![migrationManager migrateStoreFromURL:storeURL type:NSSQLiteStoreType options:nil withMappingModel:mappingModel toDestinationURL:tmpStoreURL destinationType:NSSQLiteStoreType destinationOptions:nil error:&error]) {
- NSLog(@"Error migrating %@, %@", error, [error userInfo]);
- abort();
- }
- NSFileManager *fileManager = [NSFileManager defaultManager];
- NSString *oldStoreName = @"cdNBA_old.sqlite";
- NSURL *oldStoreURL = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:oldStoreName]];
- [fileManager moveItemAtURL:storeURL toURL:oldStoreURL error:&error];
- [fileManager moveItemAtURL:tmpStoreURL toURL:storeURL error:&error];
可以发现有一份旧的sqlite文件和一份新的。
通过查看新的sqlite文件中的数据,可以得知newSalary的值:
其中,newSalary为2420000.0,刚好是salary的值2200000.0的1.1倍。
相关推荐
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是一款强大的自动化工具,它可以帮助Java开发者自动生成Mybatis的相关代码,包括DAO(Data Access Object)、Model以及Mapper XML映射文件。这极大地提高了开发效率,减少了手动编写重复代码的时间...
在iOS开发中,Core Data是苹果提供的一种强大的数据管理框架,用于处理应用程序中的对象图和持久化存储。当面临大数据量时,数据迁移成为一个关键问题,因为错误的迁移策略可能导致性能下降甚至数据丢失。本文主要...
* Chapter 12: Saving data with Entity Framework Core 这些章节将指导读者如何构建完整的应用程序,包括依赖注入、服务注册、应用程序配置和数据存储等方面。 Part 3 Generating_HTML_with_Razor_Pages_and_MVC...
EntityFrameworkCore(简称EF Core)是微软推出的一款轻量级的对象关系映射(Object/Relational Mapping,简称ORM)框架,它是EntityFramework(简称EF)的跨平台版本,用于.NET平台。EF Core是.NET Core的一部分,...
本文将深入探讨Core Data在实际应用中的使用,以及如何进行数据模型的升级。 Core Data并非一个传统的SQL数据库,而是面向对象的数据管理系统,它提供了数据建模、存储、检索以及对象关系映射的功能。它的核心概念...
- **数据模型(Data Model)**: 包括实体、属性、关系等,定义了数据库的结构。 2. **数据库迁移(Database Migrations)** - EF Core提供了一种方便的数据库版本控制机制,通过添加、删除和更新迁移文件来跟踪...
它能够根据数据库中的表结构自动生成Java源代码,包括DAO(Data Access Object)、Model对象以及Mapper映射文件。这极大地提高了开发效率,减少了手动编写重复代码的工作量。 在标题"Mybatis-generator-core"中,...
- **Data Access/Integration**:如JDBC、ORM(Object-Relational Mapping)模块,支持与各种数据库的交互。 - **Web**:Web-Servlet模块为基于Servlet的Web应用提供支持,Web-MVC模块则提供了Model-View-...
Mapping the Security Development Lifecycle to the Software Development Lifecycle Software Development Methodologies Waterfall Development Agile Development Chapter Summary References Security ...
Core Data通过ORM(Object-Relational Mapping)技术将这些实体映射到Objective-C或Swift的对象上,使得开发者可以直接操作对象而不是SQL语句。 设计数据模型是使用Core Data的第一步。在iOS开发中,我们可以通过...
iBatis.NET 是另一种 .NET 持久层框架,它同样是从 Java 上的 iBatis 移植而来的 o/rmapping 框架,它包括 DataMapping 和 DataAccess 两部分: DataMapping:ORM 的实现部分,对象映射通过映射文件来定义,支持 ...
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包来支持其核心功能和服务。下面将详细阐述这些jar包的作用及其在Spring框架中的重要性。 1. **Spring Core Container**: - `spring-core.jar`: 核心模块,提供了IoC...
3. **Data Access/Integration**:这部分包括对数据库操作的支持,如ORM(Object-Relational Mapping)和JDBC。涉及的jar包有: - `spring-jdbc.jar`:提供对JDBC的抽象层,简化数据库访问。 - `spring-tx.jar`:...
本篇文章将详细介绍如何使用MyEclipse集成开发环境在五分钟内快速搭建SSH(Spring、Struts2、Hibernate)结合JPA技术的应用环境,并自动生成DAO(Data Access Object)层与Model(数据模型)。通过这一过程,我们将...
- **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框架是Java开发领域中最广泛使用的轻量级框架之一,以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)能力而著称。本文将深入探讨Spring框架的核心...