Entity Framework 6如何实现内连接?

时间:2015-12-24 17:23:02

标签: c# entity-framework entity

我定义了以下两个类:

    <script type="text/javascript">                 
 (function () { // 1) remove the "$"
   $(".comment_switch").click(function () { // 2) add "." if this a class or "#" // if it is an id
    $(".comments").toggleClass("hidden");
  });
});
</script> 

 public class tblInstrument
 {

     [Key]
     public int InstrumentID { get; set; }
     public int MarketID { get; set; }
     public virtual tblMarket tblMarket { get; set; }

 }

我想知道为什么以下代码在附加到tblInstrument类时不起作用:

[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; }

}

当我在其上设置断点时,我看到tblmarket为null但它是虚拟的,这意味着它是“延迟加载”所以这可能是为什么它为null但是FullInstrumentName属性不返回tblmarket的预期Market属性(一个字符串)。有人可以帮我理解Entity的加入方式吗?

由于 -Ed

3 个答案:

答案 0 :(得分:1)

默认情况下,此关系将为Lazy Loaded,当您需要使用FullInstrumentName属性时,需要覆盖特定方案的行为:

DbContext.tblInstruments
    .Include( i => i.tblMarket )
    .Where( i.MarketID == xyz );

要使用包含,您需要导入 System.Data.Entity 命名空间。

作为替代方案,如果您发现您将经常使用该属性,那么您可能会考虑完成删除该关系的延迟加载,但这是您需要仔细考虑的利弊。

答案 1 :(得分:0)

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

的主键

答案 2 :(得分:0)

我的问题是我没有使用.include()方法来包含引用的表。因此,在上面的例子中,当我要求Entity检索Instrument表时,我也需要.include(a =&gt; a.tblmarket)。

-Ed