我的理解是find只将主键作为参数。如果您要查找的值实际上是主键,则效果很好。就我而言,我有一个这样的课程:
public class Chamber
{
[Key]
public int Id {get;set;}
public string ChamberName { get; set; }
}
我想检查我的上下文或数据库本身是否存在给定的ChamberName
。我怎样才能做到这一点?我是否必须首先以某种方式枚举上下文,然后使用db.Chambers.where(a=>a.ChamberName.equals...
之类的调用在数据库中查找?
如果ChamberName
是我的主键,我可以看到它运作良好,但事实并非如此。
谢谢,
答案 0 :(得分:2)
您无法使用.Find()
方法 - 但如何:
public Chamber FindByChamberName(string chamberName)
{
using(MyDbContext ctx = new MyDbContext())
{
Chamber result = ctx.Chambers
.FirstOrDefault(c => string.Compare(c.ChamberName, chamberName, true));
return result;
}
}
您不必手动枚举任何内容 - 只需按该名称检索第一个腔室出现 - 或者不检索。
如果你只是需要知道给定的腔室(由ChamberName
指定)是否存在,你可以使用Linq中的.Any()
方法:
using(MyDbContext ctx = new MyDbContext())
{
return ctx.Chambers.Any(c => string.Compare(c.ChamberName, chamberName, true));
}
答案 1 :(得分:2)
DbSet
中有一个名为Local的媒体资源。您可以先查询它以查找加载到上下文中的实体。
var entity = db.Chambers.Local.Where(/**/).SingleOrDefault();
if (entity == null)
{
entity = db.Chambers.Where(/**/).SingleOrDefault();
}