0

我有一个Tenant继承自UserProfile. 我使用 table-per-type 继承,所以我的上下文类看起来像这样:

// 1 DbSet for superclass UserProfile
public DbSet<LetLord.Models.UserProfile> UserProfile { get; set; } 

我正在使用存储库类进行数据访问,并TenantRepository使用以下包管理器命令创建:

脚手架控制器租户 - 存储库

当我尝试运行我的应用程序时,TenantRepository 中对租户的所有引用都会引发以下错误...

'MyNamespace.MyContext' 不包含定义'Tenant',并且找不到接受第一个参数'MyNamespace.MyContext' 的'Tenant' 的扩展。

...例如以下参考:

public IQueryable<Tenant> All
{
    get { return context.Tenant; } // error line here
}

当使用 table-per-type 继承时DbSet,应该只包含一个 for 基类,所以我明白为什么我会收到错误。

在我的场景中如何使用带有派生类的存储库?


编辑

使用 , 等时如何完成.Add()上述.Find()操作.Remove()

与上述方法相同的错误:

public Tenant Find(int id)
{
    return context.UserProfile.OfType<Tenant>().Find(id); // error at .Find()
}
4

1 回答 1

1

尝试这个:

public IQueryable<Tenant> All
{
    get { return context.UserProfile.OfType<Tenant>(); }
}

这只会返回租户。

对于添加、查找、删除等其他方法:

public Tenant Find(int id)
{
    // a few different options here -- assumes your key property is Id
    return context.UserProfile.OfType<Tenant>().SingleOrDefault(t => t.Id == id);

    // option 2 
    // even though your context does not expose a DbSet<Tenant>, you can still
    // use the Set<TResult>() method to get only tenants this way
    return context.Set<Tenant>().Find(id);
}

public void Add(Tenant tenant)
{
    context.Add(tenant);
}

public void Remove(Tenant tenant)
{
    context.Set<Tenant>().Remove(tenant);
}
于 2013-02-27T14:38:43.807 回答