关于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 显示未实例化
请问怎样才能调用到新闻类型的名字呢? 展开
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 显示未实例化
请问怎样才能调用到新闻类型的名字呢? 展开
展开全部
有两种方法
一次性查完,比如Type t = db.News.Find(id).Type;
用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了。
引用阳光的雷咩咩的回答:
有两种方法
一次性查完,比如Type t = db.News.Find(id).Type;
用include 第一句改成 var mod = db.News.Include("Type").Find(id);注意下中间的字符串单复数啥的也许需要调试一下,这与你是否启用了单复数有关系。
有两种方法
一次性查完,比如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);
建议:var mod = db.News.Include(m=>m.Type).SingleOrDefault(m=>m.ID==id);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询