在EF6中,当我们用Code First的模式进行编程时,EF会自动创建_MigrationHistory表包含以下4个字段:
-
MigrationId: 就是在Add-Migration指令中指定的<版本名>,EF会自动在前面加上时间戳
-
ContextKey: 主要作用是对Model进行分组,这样不同项目的Model可以在同一个DB中互不干扰
-
Model:EF会基于DBContext中包含的所有Entity Model生成字节数组,核心代码如下所示
-
ProductVersion:生成这个Migration的EF的版本号
生成Model的核心:
-
public virtual byte[] Compress(XDocument model)
-
{
-
DebugCheck.NotNull(model);
-
using (var outStream = new MemoryStream())
-
{
-
using (var gzipStream = new GZipStream(outStream, CompressionMode.Compress))
-
{
-
model.Save(gzipStream);
-
}
-
return outStream.ToArray();
-
}
-
}