循环遍历实体框架对象的表和列
本文关键字:对象 遍历 实体 框架 循环 | 更新日期: 2023-09-27 18:30:58
我有一个名为 BookLibrary
的数据库,其中包含 3 个表Author
、Payroll
和 Article
个表。我正在使用实体框架连接到数据库。我创建了它的一个实例。
BookLibrary bookLibraryContext = new BookLibrary();
现在我想在数据集中转换它(将数据集作为参数传递)。怎么办?
此外T4
通过使用模板,我想将所有列名生成为只读字符串属性。为此,我需要遍历数据库内的所有表和列名(我想通过我的实体对象 bookLibraryContext
执行此操作)。但是我不确定如何遍历实体对象的所有表和列?我已经在谷歌上搜索过它,但许多人建议使用反射进行循环或直接使用 SQL。我想通过 C# 来做到这一点,但我对反射不太熟悉。
现在我想在数据集中转换它(将数据集作为参数传递)。怎么办?
手动地。EF 和数据集是完全不同的技术,它们都不包含任何对转换为另一种技术的支持。因此,您必须手动创建数据集和要使用的所有数据表,并从上下文中手动填充它们。
如果要使用数据集,请不要使用实体框架。直接使用数据集。
但是我不确定如何遍历实体对象的所有表和列?
实体对象没有此信息。此信息隐藏在 EF 映射的深处,可通过 bookLibraryContext.MetadataWorkspace
获得。您无需反思即可获得此信息。您只需要了解 EDM 及其存储信息的方式。
尝试这样的事情:
foreach (var entityType in context.MetadataWorkspace
.GetItems<EntityType>(DataSpace.SSpace))
{
string tableName = entityType.MetadataProperties
.Single(m => m.Name == "Name")
.Value
.ToString();
var members = (ReadOnlyMetadataCollection<EdmMember>)entityType
.MetadataProperties
.Single(m => m.Name == "Members")
.Value;
foreach (var columnName in members.Select(m => m.Name))
{
}
}