我正在尝试做一些相对容易的事情,但我不知道如何构建它。
我有一个Generated Entity,我想通过添加Linq Where语句来覆盖它。
此处为Context的部分内容:
public partial class MyEntities: DbContext
{
public MyEntities()
: base("name=MyEntities")
{
}
public DbSet<Assignee> Assignees { get; set; }
}
我已经创建了MyEntities的新部分并尝试了以下
public override DbSet<Assignee> Assignees
{
get
{
return this.Assignees.Where(z => z.IsActive == true);
}
set;
}
但这会引发歧义错误(很明显)。
我该如何做到这一点?
谢谢
答案 0 :(得分:11)
尝试使用不同的名称公开DbSet<Assignee>
和IQueryable<Assignee>
public partial class MyEntities: DbContext
{
public MyEntities()
: base("name=MyEntities")
{
}
public DbSet<Assignee> AssigneesSet { get; set; }
public IQueryable<Assignee> Assignees
{
get
{
return AssigneesSet.Where(z => z.IsActive == true);
}
}
}
答案 1 :(得分:2)
您是否尝试过为模型中的表映射添加条件?右键单击edmx中的实体,然后选择“表映射”。然后“添加条件”。可能是一个更优雅的解决方案。
答案 2 :(得分:1)
public override DbSet<Assignee> Assignees
{
get
{
return base.Assignees.Where(z => z.IsActive == true);
}
set;
}
这是你想要的吗?
答案 3 :(得分:0)
一个好的做法是在DAL文件夹中创建存储库类(使用您想要的名称)。 然后在那里做过滤器。 这是一个微软的教程:
根据您想要的条件不能放置EF映射条件,原因如下: http://entityframework.codeplex.com/workitem/48
答案 4 :(得分:0)
我知道这是超级旧的,但另一种简单而优雅的方式,在不更改任何现有名称的情况下,使用new
关键字隐藏原始成员,如下所示:
public new IQueryable<Assignee> Assignees
{
get
{
return base.Assignees.Where(z => z.IsActive == true);
}
}
只是想为未来的访客分享,希望它有所帮助!