在C#ASP.Net MVC中将链接对象添加到另一个对象

时间:2013-12-02 11:27:42

标签: c# linq entity-framework

我的模型如下:

public class Analyst
{
    public int AnalystId { get; set; }
    public string AnalystName { get; set; }
    public string CorpId { get; set; }
    public string TeamLeader { get; set; }
    public string TLCorpId { get; set; }
    public IList<Objective> Objectives { get; set; }
    public IList<ObScore> ObScores { get; set; }
}

public class Objective
{
    public int ObjectiveId { get; set; }
    public int AnalystId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public int Weight { get; set; }
    public Analyst Analyst { get; set; }
}

我正在努力找到一个我可以做的具体目标:

Objective objective = db.Objectives.Find(id);

...但是,我还希望包含与目标相关联的分析师,因此我可以在已发现的Analyst对象上引用属性:

if (objective.Analyst.TLCorpId != tl)

但是当我试图添加分析师对象时,我收到一个错误:

Objective objective = db.Objectives.Include(x => x.Analyst).Find(id);
  

System.Linq.IQueryable<Objectives.Models.Objective>不包含“查找”的定义,也没有“查找”的扩展方法   接受第一个类型的参数   可以找到System.Linq.IQueryable<Objectives.Models.Objective>   (您是否缺少using指令或程序集引用?)

请问有什么方法吗?

2 个答案:

答案 0 :(得分:2)

Find上定义的方法DbSet<T>。方法Include在基类DbQuery<T>上定义。这里的问题是Include返回基类的实例,即没有方法DbQuery<T>的{​​{1}}(基于lambda的include只是用于调用相同的基于字符串的include方法的语法糖)。甚至在这里进行强制转换也无济于事,因为基类的新实例是在内部创建的:

Find

因此,使用public DbQuery<TResult> Include(string path) { return new DbQuery<TResult>(this._internalQuery.Include(path)); } 按ID获取实体

SingleOrDefault

注意:这里的一个区别是Objective objective = db.Objectives.Include(x => x.Analyst) .SingleOrDefault(x => x.ObjectiveId == id); 在进行数据库查询之前首先检查实体是否已存在于上下文中。

答案 1 :(得分:1)

您可以使用

目标目标= db.Objectives.Find(id).Where(y =&gt; y.Analyst.TLCorpId!= tl).First();

别忘了检查空值