gpt4 book ai didi

entity-framework - 我可以从特定的迁移中解码 Entity Framework 模型吗?

转载 作者:行者123 更新时间:2023-12-03 14:36:19 24 4
gpt4 key购买 nike

显然,IMigrationMetadata.Target对EF模型的状态进行编码。
我可以使用它来为特定迁移重建模型吗?

最佳答案

是的,有可能。我自己很好奇那些魔术资源字符串到底存储了什么。通过digging into the Entity Framework source(请参阅DbMigrator.GetLastModel()方法),我发现IMigrationMetadata.Target只是存储了包含gzip压缩XML数据的base-64字符串。为了测试这一点,我创建了一个新的控制台应用程序,其中包含一个简单的代码优先模型,定义如下:

public class ContactContext : DbContext
{
public virtual IDbSet<Contact> Contacts { get; set; }
}

public class Contact
{
public int Id {get; set;}
public string FirstName { get; set; }
public string LastName { get; set; }
}


然后,我使用NuGet软件包管理器控制台创建了迁移:

PM> Enable-Migrations
PM> Add-Migration MyMigration


接下来,我将以下代码添加到应用程序的 Main()方法中,以对该字符串中的值进行解码并将其转储到控制台:

var migration = new MyMigration();
var metadata = (IMigrationMetadata)migration;
var compressedBytes = Convert.FromBase64String(metadata.Target);
var memoryStream = new MemoryStream(compressedBytes);
var gzip = new GZipStream(memoryStream, CompressionMode.Decompress);
var reader = new StreamReader(gzip);
Console.WriteLine(reader.ReadToEnd());


outputs an EDMX file 表示与创建迁移的我的 DbContext关联的实体数据模型。如果我将此输出写入扩展名为 .edmx的文件中,则可以使用Visual Studio打开它并在实体设计器中查看它。

然后,如果由于某种原因我想重新生成生成模型的 DbContext和实体类,则只需执行以下操作:


.edmx文件添加到Visual Studio项目。
如果尚未安装 EF 5.x DbContext Generator for C#,请安装它。
通过从项目节点上下文菜单中选择 Add -> New Item,添加相关的T4模板。
修改新添加的 .tt文件,将 $edmxInputFile$替换为我的 .edmx文件的名称。
看着这两个模板神奇地将我的代码优先类型重新生成为各自的 .cs文件。


希望这能回答你的问题! :-D

关于entity-framework - 我可以从特定的迁移中解码 Entity Framework 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15709849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com