public class StudentInfo: StudentBase
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="studID"></param>
public StudentInfo(string studID):base(studID)
{
using(var db = new CetDataBase())
{
IQueryable<RegTab> cetInfoQuery = from s in db.RegTab
where s.Xh == studID
select s;
foreach (var cetInfo in cetInfoQuery)
{
}
}
}
public string sfzh { get; set; }
public virtual ICollection<CetInfo> CetInfo { get; set; }
}
测试代码如上,目前还在学习中,也许不一定对,请大家指点,
说明,其中CetInfo 是一个业务实体类,因为一个StudentInfo 可以有多个CetInfo ,请问初始化时,如何给这个ICollection<CetInfo> CetInfo 初始化
我本来想通过数据库查询出来的结果给CetInfo 初始化,但查出来的结果是IQueryable<RegTab>类型的,如何转换成ICollection<CetInfo>呢?
或者其它的办法有没有,比如延迟查询,当需要的时候再初始化CetInfo属性,但是到这一步的时候,仍然面临同样的问题,IQueryable<RegTab>如何转换为ICollection<CetInfo>?

------解决方案--------------------
public virtual ICollection<CetInfo> CetInfo { get; set; }
这里换成IEnumerable 同时建议使用lazy
所以最终就是public virtualI Lazy<IEnumerable<CetInfo>> CetInfo { get; set; }
你想对他定义就是
CetInfo =()={ //这块对 其进行数据查询工作并返回数据集合} //当然这里是lazy查询所以你甚至可以先把所有外键值完全暂存在一个list里,然后后面一次性查询如内存在根据外键过滤,这个过程类似EF地include
当然所有以上讨论基于你自己去实现他,如果你本身是使用EF地话,这些工作根本不需要你做,EF全会自动帮你完成
------解决方案--------------------
如果你对
CetInfo= from s in db.RegTab
where s.Xh == studID
select s;
不满意,你应该使用一个BLL功能方法来封装更有意义的查询操作,而不是乱改什么实体定义。
我确实遇到过自称为研究了“三层”6、7年的人在实体类里乱写数据库查询,这样的人基本上都改行做销售了,而没有做出什么产品。因为一旦做灵活一点的东西,过度单一的模型让他就根本纠结不清了。