我定义了以下两个类:
<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
答案 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