实体框架6如何实现内部联接
本文关键字:实现 内部 框架 何实现 实体 | 更新日期: 2023-09-27 18:28:03
我定义了以下两个类:
public class tblInstrument
{
[Key]
public int InstrumentID { get; set; }
public int MarketID { get; set; }
public virtual tblMarket tblMarket { get; set; }
}
和
[Table("tblMarket")]
public class tblMarket
{
public tblMarket()
{
tblInstruments = new HashSet<tblInstruments>();
}
[Key]
public int MarketID { get; set; }
[Required]
[StringLength(10)]
public string Market { get; set; }
public virtual ICollection<tblInstruments> tblInstruments { get; set; }
}
我想知道为什么以下代码在附加到tblInstrument类时不起作用:
[NotMapped]
public string FullInstrumentName
{
get { return string.Format("{0}", tblMarket.Market.Trim(); }
}
当我在其上放置断点时,我看到tblmarket为null,但它是虚拟的,这意味着它是"惰性加载的",这可能就是它为null的原因,但FullInstrumentName属性不会返回tblmarkets的预期Market属性(字符串)。有人能帮我理解Entity是如何加入的吗?
谢谢-Ed
默认情况下,此关系将是Lazy Loaded,当您需要使用FullInstrumentName属性时,您需要为特定场景覆盖该行为:
DbContext.tblInstruments
.Include( i => i.tblMarket )
.Where( i.MarketID == xyz );
若要使用Include,您需要导入System.Data.Entity命名空间。
作为一种选择,如果你发现你将更频繁地使用该属性,那么你可能会考虑为该关系完全删除懒惰负载,但这是你需要仔细考虑的利弊。
EF希望您向他展示如何与表建立关系,因此您需要映射tblMarket
的外键,请参见映射:
public class tblInstrument
{
[Key]
public int InstrumentID { get; set; }
public int MarketID { get; set; }
[ForeignKey("MarketID")]
public virtual tblMarket tblMarket { get; set; }
}
因此EF将
MarketID
与tblMarket
的主键进行映射
我的问题是没有使用.include()方法来包含引用的表。因此,在上面的例子中,当我要求Entity检索Instrument表时,我也需要.include(a=>a.tblmarket)。
-Ed