使用包含时“指定的包含路径无效”
Posted
技术标签:
【中文标题】使用包含时“指定的包含路径无效”【英文标题】:"A specified Include path is not valid” when using Include 【发布时间】:2014-10-23 06:58:22 【问题描述】:当我使用Include
方法时,我得到了这个错误:
指定的包含路径无效
我的课:
public class ClubMember
public int Id get; set;
public string Name get; set;
public System.DateTime Date get; set;
public class Card
public int Id get; set;
public int CardNumber get; set;
public ClubMember Member get; set;
出错时的字符串:
IList<Card> cards = db.Cards.Include(n => n.Member.Name).Include(n => n.Member.Date).ToList();
我想要这张组合表:
卡号 |姓名 |日期
怎么了?
【问题讨论】:
.Include(n => n.Member)
应该足够了。
我试试这个,但结果更糟:|卡号 |会员 |在成员字段中只有这个字符串:“MyDataBase.Data.Entities.ClubMember”
@viton-zizu 不,属性Member
不返回字符串"MyDataBase.Data.Entities.ClubMember"
,它返回MyDataBase.Data.Entities.ClubMember
类型的对象,ToString()
函数(你应该'不打电话)返回"MyDataBase.Data.Entities.ClubMember"
。不要调用 ToString()
函数,而是参考对象的属性 Name
和 Date
。
@viton-zizu:我在回答中包含了一个简短的 sn-p 如何访问它们,但也许您应该多阅读一下“EF 的工作原理”。 EF 是一个 ORM,不返回“表”,而是返回“实体”,包括相关实体的“导航属性”...
【参考方案1】:
Include
是包含实体而不是属性:
var cards = db.Cards.Include(n => n.Member).ToList();
这将为每个已加载的Card
(包括所有标量属性)预先加载相关的Member
-entity。
然后你就可以访问它们了:
foreach (var card in cards)
int cardNumber = card.CardNumber;
string name = card.Member.Name;
DateTime date = card.Member.Date;
如果您只想获取这三个属性,您还可以将查询映射到匿名类型:
var cards = db.Cards.Select(c =>
new
CardNumber = c.CardNumber,
Name = c.Member.Name,
Date = c.Member.Date
).ToList();
foreach (var card in cards)
int cardNumber = card.CardNumber;
string name = card.Name;
DateTime date = card.Date;
但这只有在您的桌子实际上比此处显示的大得多时才有意义。如果不是,我肯定会选择“真正的实体”——尤其是如果你想在某个时候更新它们。
【讨论】:
感谢您的回复!我会努力的! 对不起,一切顺利!再次感谢您!以上是关于使用包含时“指定的包含路径无效”的主要内容,如果未能解决你的问题,请参考以下文章
catkin / ROS:如何在使用子模块时正确指定包含路径
尝试导入 sass 模块时,如何在 Vue CLI 中使用包含路径?