使用实体框架动态选择表

nee*_*hah 5 c# entity-framework

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

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

Mat*_*ero 2

您的所有实体都应该扩展基类或实现定义属性的接口Name

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

public class Car : INamed {
     public int Id { get; set; }
     public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

如果您确定所有实体都是INamed,那么您可以用一行来实现这一切:

return ((INamed)context[entityName].Find(id)).Name;
Run Code Online (Sandbox Code Playgroud)

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