关于linq to entities中如何获取外键所在表的值?

asp.netmvc中采用codefirst建立两个类1New2Type{intNewId{intTypeIdstringcontentstringNameTypeTyp... asp.net mvc 中采用codefirst建立两个类
1New 2Type
{ int NewId { int TypeId
string content string Name
Type Type }
}
控制器:var mod = db.News.Find(id);
调试发现 New.Type ==null
视图中@Model.New.Type.Name 显示未实例化
请问怎样才能调用到新闻类型的名字呢?
展开
 我来答
阳光的雷咩咩
推荐于2016-11-23 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7872万
展开全部

有两种方法

  1. 一次性查完,比如Type t  = db.News.Find(id).Type;

  2. 用include 第一句改成 var mod = db.News.Include("Type").Find(id);注意下中间的字符串单复数啥的也许需要调试一下,这与你是否启用了单复数有关系。

追问
昨天我看了书用
Type type = (from n in db.News where n.TypeId == id(传来的参数) select n.Type).First();
解决了问题,貌似和你的第一个解决方案一样
第二个我试了一下出现错误,您能简单的解释下这两种方法的意思吗?
追答
linq默认是没加载外键的数据的,也许你上面的情况一个New只对应了一个Type,所以你认为应该默认加载进来,但是那毕竟是另外一个表的,再考虑更复杂的情况,有时候主键表与外键表是一对多的关系,如果linq默认加载的话,查询性能会受非常大的影响,极端情况下你查询一个记录就会把整个数据库的数据查询到客户端。所以微软选择默认不加载外键。第二种就是加载的选项,你报错的话看来字符串应该是Types了。
水瓶mikuo
2018-02-06
知道答主
回答量:2
采纳率:0%
帮助的人:1880
引用阳光的雷咩咩的回答:
有两种方法
一次性查完,比如Type t = db.News.Find(id).Type;
用include 第一句改成 var mod = db.News.Include("Type").Find(id);注意下中间的字符串单复数啥的也许需要调试一下,这与你是否启用了单复数有关系。
展开全部
include后面接不了find
建议:var mod = db.News.Include(m=>m.Type).SingleOrDefault(m=>m.ID==id);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式