c# - 使用 Entity Framework 动态选择表

标签 c# entity-framework

我有一个不同实体的属性名称,如汽车、人等。根据 Id 我想获取名称。但我想用一个方法完成它entityName 并根据它给出输出。 像这样:

public string GetEntityByName(int id,string entityName)
    {
        using (var context = new MyContext())
        {
            return context[entityName].Find(id).Name;
        }
    }

最佳答案

您所有的实体都应该扩展一个基类或实现一个定义 Name 的接口(interface)属性(property)。

public interface INamed {
     string Name { get; set; }
}

public class Car : INamed {
     public int Id { get; set; }
     public string Name { get; set; }
}

我不知道 DbContext支持索引属性,但如果支持,您可以设法执行如下操作:

INamed namedEntity = context[entityName].Find(id) as INamed;
if(namedEntity != null)
     return namedEntity.Name;
else
     return string.Empty;

如果您确定所有实体都是 INamed , 那么你就可以在一行中实现这一切:

return ((INamed)context[entityName].Find(id)).Name;

请注意,如果检索到的实体未实现 INamed,后一种方法将引发或抛出异常

关于c# - 使用 Entity Framework 动态选择表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030064/

相关文章:

c# - 为什么在取消大量 HTTP 请求时取消会阻塞这么长时间?

c# - EF 6 - EntityType 在运行 Enable-Migrations 时没有定义键

c# - 是否可以在低于 6 的 EF 版本中拦截来自 EF 的 DB 查询?

c# - 如何在 RichTextBox 中捕获 Ctrl-Z 击键

c# - 在 C# 中通过 API 使用 IBM Watson Conversation

c# - ASP.NET Core API 服务生命周期

entity-framework - Entity Framework 4.1 : The navigation property 'BusinessUser' declared on type 'Login' has been configured with conflicting multiplicities

c# - 使用松耦合 WCF Web 服务的 ASP.NET MVC

entity-framework - Entity Framework 验证困惑- '128'的最大字符串长度

c# - Entity Framework 模型缓存使其无法用于大量数据库模式