2

我正在使用 MVC3、EF4.1 和 C#。

我正在尝试使用通用方法来更新存在于众多实体类型中的属性。因此,我需要将类型作为参数传递给方法。请问我该怎么做?

一些代码:

    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

但是,有兴趣知道一个人如何传递一种类型。

谢谢。

4

2 回答 2

7

您可以为此使用通用方法

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
{
    ...
}
于 2013-09-17T12:36:33.507 回答
-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));
于 2013-09-17T12:29:38.057 回答