缺失version model的情况下能否完成Core Data的数据迁移?

今天遇到一个问题,问题描述见此 http://stackoverflow.com/q/20062215/889538

为此进行了一番验证。

我有一个Demo工程,叫做cdNBA,其数据模型如下:


然后基于cdNBA新建了两个分支:cdNBA1和cdNBA2,分别对数据模型进行修改。


cdNBA1工程创建了cdNBA 5.xcdatamodel,并安装到模拟器上写过数据。

接着cdNBA2工程创建了cdNBA 6.xcadatamodel,缺失cdNBA 5.xcdatamodel文件:


继而,对模拟器上的cdNBA进行覆盖安装,可以发现数据得到了迁移:



为什么在缺失cdNBA 5.xcdatamodel文件的情况下,能从cdNBA1升级到cdNBA2呢?

官方文档描述数据迁移的要求是:

A managed object model that it can use to open the existing store.

而非必须是精确的对应模型文件。而模型文件本身是xml结构描述文件,除了一些基本信息外,就是对各种表、各个字段的描述。何为“can use to open the existing store”的模型文件,目前无法得到确切的验证(无源代码言X),但可以得到的结论是在缺失对应version model的情况下,如果modification相对lightweight,那么是可以成功迁移数据的。

接前面的回复,Program.cs 内容如下: using System; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity; using Npgsql; namespace PostgresEFDemo { // 实体类定义 [Table("test_01", Schema = "public")] public class Test01 { [Column("id")] public int Id { get; set; } [Column("name")] public string Name { get; set; } } // 自定义DbConfiguration public class NpgsqlDbConfiguration : DbConfiguration { public NpgsqlDbConfiguration() { SetProviderServices("Npgsql", Npgsql.NpgsqlServices.Instance); SetProviderFactory("Npgsql", Npgsql.NpgsqlFactory.Instance); } } // DbContext定义 [DbConfigurationType(typeof(NpgsqlDbConfiguration))] public class PgDbContext : DbContext { public DbSet<Test01> Test01 { get; set; } // 构造函数硬编码连接字符串 public PgDbContext() : base("Host=192.168.93.194;Port=5432;Database=postgres;Username=dingyi;Password=Hello@1234;") { Database.SetInitializer<PgDbContext>(null); // 禁用迁移初始化 } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("public"); base.OnModelCreating(modelBuilder); } } // 主程序 class Program { static void Main(string[] args) { using (var context = new PgDbContext()) { var newRecord = new Test01 { Id = 2000, Name = "TEST_EF6" }; context.Test01.Add(newRecord); context.SaveChanges(); Console.WriteLine("数据插入成功!"); } } } } App.config 的内容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.data> <DbProviderFactories> <remove invariant="Npgsql" /> <add name="Npgsql Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" /> </DbProviderFactories> </system.data> <entityFramework> <providers> <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" /> </providers> </entityFramework> </configuration> 报错2个异常: ConfigurationErrorsException: Configuration system failed to initialize ConfigurationErrorsException: Unrecognized configuration section system.data.
05-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值