我正在使用MVC3,EF4.1和C#。
我正在尝试使用泛型方法来更新存在于众多实体类型中的属性。因此,我需要将Type作为参数传递给方法。我该怎么办呢?
一些代码:
public Boolean CompleteTask()
{
PRV myCurrentRecord = db.Task.OfType<PRV>().Single(r => r.Id == myId);
myCurrentRecord.IsComplete = true;
if (db.SaveChanges() > 0)
return true;
else return false;
}
在上面的例子中,“PRV”是“硬编码的”。我想传递所有“IsComplete”作为属性的不同类型。
我正在使用TPH继承,并且刚刚意识到我可以使用父实体,即:
Parent.IsComplete
然而,有兴趣知道如何传递一个类型。
感谢。
答案 0 :(得分:7)
您可以使用generic method:
public Boolean CompleteTask<TEntity>()
{
TEntity myCurrentRecord = db.Task.OfType<TEntity>().Single(r => r.Id == myId);
myCurrentRecord.IsComplete = true;
if (db.SaveChanges() > 0)
return true;
else return false;
}
您必须为TEntity
添加类型约束,以确保它源自具有IsComplete
属性的父类型。
public Boolean CompleteTask<TEntity>() where TEntity : ParentType
{
...
}
答案 1 :(得分:-2)
尝试以下操作并告诉我
public Boolean CompleteTask(Type t)
{
t myCurrentRecord = db.Task.OfType<t>().Single(r => r.Id == myId);
myCurrentRecord.IsComplete = true;
if (db.SaveChanges() > 0)
return true;
else return false;
}
然后可以按如下方式调用:
CompleteTask(typeof(EFType));