如何将EF Type名称传递给方法参数?

时间:2013-09-17 12:25:55

标签: c# asp.net-mvc entity-framework

我正在使用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

然而,有兴趣知道如何传递一个类型。

感谢。

2 个答案:

答案 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));