MigrationHistory表中的模型列是什么?

Nas*_*aee 11 c# entity-framework ef-migrations

在EF6中使用Code First Migration时,它会创建一个__MigrationHistory使用四列调用的表:

MigrationId
ContextKey
Model
ProductVersion
Run Code Online (Sandbox Code Playgroud)

Model字段中的二进制数据是什么?它是否包含数据库架构?我的意思是如果我有一个包含数百个表的数据库,该Model字段是否包含所有这些表?

小智 15

在 MSSQL 上使用

SELECT *, CONVERT(xml, DECOMPRESS(Model)) FROM [dbo].[__MigrationHistory]
Run Code Online (Sandbox Code Playgroud)


Sof*_*tor 12

在内部,它使用此函数来获取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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以,是的,该字段似乎包含压缩形式的整个模型.

  • 有趣的是,我们如何从`DbContext`获得`XDocument model`? (2认同)
  • @YuliamChandra:它使用内部EdmxSerializer类将DbDatabaseMapping类型的对象序列化为XML格式.DbDatabaseMapping包含所有EDM信息 (2认同)

Jul*_*bre 6

为了理解EF 的迁移过程,我建议查看Max Vasilyev的启发性实体框架迁移内部或如何查看生成的 Xml-Schema文章。

文章提供了一个示例项目。您只需要将示例输出之一保存到.edmx文件,然后使用Visual Studio打开它。