我正在尝试编写一些逻辑,以根据动态表值从数据库中获取实体值。在这篇帖子之后,我已经到了TEntity
Entity framework - get entity by name
我不遵循这里所说的内容。以下代码:
public static void PublishTable(string user, ContentFields tableToPublish)
{
var jsonData = DataAccess.GetEnvironmentJson((int)Environments.Production);
var model = JsonConvert.DeserializeObject<Models.FullDataSetModel>(jsonData);
using (var db = new LoginPageContentEntities())
{
var deployEntry = db.Deployment.Find((int)Environments.Production);
deployEntry.DateUpdated = DateTime.Now;
var pendingChangesFlag = deployEntry.GetType().GetProperty(tableToPublish.ToString());
pendingChangesFlag.SetValue(deployEntry, false);
var publishToModel = model.GetType().GetProperty(tableToPublish.ToString());
var tableValue = (IEnumerable<????>)typeof(LoginPageContentEntities).GetProperty(tableToPublish.ToString()).GetValue(db, null));
publishToModel.SetValue(model, tableValue.ToList());
var json = JsonConvert.SerializeObject(model);
deployEntry.JsonCache = json;
db.SaveChanges();
}
}
例如,如果我在ProductInformation
中传递IEnumerable<ProductInformation>
的实体,那么当我更改该特定实体时,这将起作用。
运行到演员表的部分,我不遵循从上下文中获取值所需的操作。他们正在定义TEntity
,但在定义中没有任何内容。
答案 0 :(得分:1)
您的问题似乎是 - 什么是TEntity?
TEntity是通用的。来自评论https://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx#csharp_generics_topic2
中提供的链接参见代码块
public class Stack<T>
{
T[] m_Items;
public void Push(T item)
{...}
public T Pop()
{...}
}
T指定通用。你可以插件类 - 就像实例化Stack时那样你有ProductInformation。例如 -
var stk = new Stack<ProductInformation>();
答案 1 :(得分:0)
我设法通过其他答案的一些帮助来解决我的问题,但是我发布了我的解决方案,因为它适用于使用EF。
public static void PublishTable<TEntity>()
{
var targetEntity = typeof(TEntity).Name;
var model = JsonConvert.DeserializeObject<Models.FullDataSetModel>(DataAccess.GetEnvironmentJson((int)Environments.Production));
using (var db = new LoginPageContentEntities())
{
var deployEntry = db.Deployment.Find((int)Environments.Production);
deployEntry.DateUpdated = DateTime.Now;
deployEntry.GetType().GetProperty(targetEntity).SetValue(deployEntry, false);
model.GetType().GetProperty(targetEntity).SetValue(model, ((IEnumerable<TEntity>)(typeof(LoginPageContentEntities).GetProperty(targetEntity).GetValue(db, null))).ToList());
deployEntry.JsonCache = JsonConvert.SerializeObject(model);
db.SaveChanges();
}
}