c# - 如何动态访问 EF Core 中实体的属性?
问题描述
我有一个DatabaseContext
继承自DbContext
. 我正在尝试集中配置我的实体模型的一些属性。
这是我的代码DatabbaseContext
:
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
namespace Company.DataAccess
{
public abstract class DatabaseContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var allEntities = modelBuilder.Model.GetEntityTypes().Select(p => modelBuilder.Entity(p.ClrType));
foreach (var entity in allEntities)
{
// var properties = entity.GetProperties(); // this line throws exception
// foreach (var property in properties)
// {
// // if it's Guid, configure it this way
// // if it's Enum, configure it this way
// // if it's Date, configure it this way
// // ...
// }
}
}
}
}
但该行entity.GetProperties()
抛出此错误:
DatabaseContext.cs:错误 CS1061:“EntityTypeBuilder”不包含“GetProperties”的定义,并且找不到接受“EntityTypeBuilder”类型的第一个参数的可访问扩展方法“GetProperties”(您是否缺少 using 指令或程序集引用?)
如何获取实体模型的属性?
解决方案
正如错误提示GetProperties
在 type 上不可用EntityTypeBuilder
。所以你将无法调用它。但EntityTypeBuilder
作为Metadata
您可以调用的属性GetProperties
。所以试试下面 -
entity.Metadata.GetProperties();
推荐阅读
- javascript - Vue:props 不会自动分配;手动分配时 - 避免直接改变道具 - 错误
- laravel - Laravel 上传 .mp3 文件不工作 | 帖子最大大小为 400 | 所有其他格式工作
- python - Tornado 在 500 服务器错误上返回堆栈跟踪
- c# - 没有注册类型“Microsoft.AspNetCore.Http.HttpContextAccessor”的服务
- java - onPageScrollStateChanged(int state):状态代表什么
- php - 如何将文件上传到另一个 url 文件夹
- django - Django - ckeditor 不工作 - 自定义
- apache-spark - 我们什么时候应该使用 Spark-sql,什么时候应该使用 Spark RDD
- unity3d - 无法隐式转换类型,UNITY
- php - WordPress:不在特定用户角色中时将主页和页面重定向到帐户页面