gpt4 book ai didi

c# - 网络核心 : Find Primary Key of Entity Framework Core and Reflection

转载 作者:行者123 更新时间:2023-12-05 05:06:58 25 4
gpt4 key购买 nike

如何使用 Reflection .dll 从 Entity Framework Core 2 数据库支架中找到主键?

我们需要找到给定实体名称的主键成员,并以字符串形式返回主键成员。在 Sql Server 数据库上进行反向脚手架。

modelBuilder.Entity<Product>(entity =>
{
entity.HasKey(e => e.ProductInfoId)
.HasName("PK_ProductInfoId");

尝试解决方案:

尝试编写下一行代码,给定字符串实体名称:“Product”。

var assembly = Assembly.LoadFrom(@"C:\OnlineShoppingStore\bin\Debug\netcoreapp2.2\OnlineShoppingStore.dll");

assembly.GetTypes().Where(d=>d.Name = "OnlineStoreDbContext")

etc GetProperties().Where(e=>e.Name == "Product"))

其他资源:

更喜欢用反射来做这件事,而不是实例化上下文,因为这是代码生成工具,将对 10 db 项目进行。

Generic Repository in C# Using Entity Framework

最佳答案

扩展评论中的建议,您可以在代码中实例化上下文并调用所有 EF 模型检查 API,如 Ivan's answer 中所述。像这样:

var assembly = Assembly.LoadFrom(@"C:\OnlineShoppingStore\bin\Debug\netcoreapp2.2\OnlineShoppingStore.dll");
var contextType = assembly.GetTypes().First(d => d.Name == "OnlineStoreDbContext");
var ctx = Activator.CreateInstance(contextType) as DbContext; // instantiate your context. this will effectively build your model, so you must have all required EF references in your project
var p = ctx.Model.FindEntityType(assembly.GetTypes().First(d => d.Name == "Product")); // get the type from loaded assembly
//var p = ctx.Model.FindEntityType("OnlineStoreDbContext.Product"); // querying model by type name also works, but you'd need to correctly qualify your type names
var pk = p.FindPrimaryKey().Properties.First().Name; // your PK property name as built by EF model

UPD:忘记思想实验吧,它显然令人困惑。上面的方法不需要你引用你的其他项目,除了字符串名称(你看起来有)之外不需要任何类型的先验知识。当您实例化您的数据库上下文时,EF 中的基类构造函数将处理您所有的自定义覆盖,并将返回一个完整构建的模型(即所有属性都将被考虑在内)。同样,只要您仅使用 EF 元数据 API(可在基础 DBContext 类上使用),就不需要引用。希望这能澄清。

UPD2:在评论中跟进我的 IL Emit 想法。查看implementation更多背景信息请参见 my blog .这使我能够消除异常(尽管仍然必须至少有一个可用的数据库提供程序)。

关于c# - 网络核心 : Find Primary Key of Entity Framework Core and Reflection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59529311/

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