Delay Loading在现阶段的ObjectSpace并不是太好,很不稳定。而且Mapping工具不支持设置Delay Loading。
我的解决办法是构建一个泛型的集合类,然后在前一个关系对象添加个为这个类型的属性,在get访问器中构建类的实例,然后返回。
集合类代码:
public class MyObjects<Objectype> : CollectionBase {
private ObjectSet<Objectype> obs; private System.Data.ObjectSpaces.ObjectSpace os; private SqlConnection con = new SqlConnection("Server=localhost;DataBase=northwind;UID=sa;PWD=;");
/// <summary> /// 根据ID建立一个对象集合 /// </summary> /// <param name="QueryString">查询字串(大小写敏感)</param> /// <param name="ObjName">希望构建的对象类型名称</param> public MyObjects(string QueryString) {
try { os = new ObjectSpace("data.msd", con);
obs = os.GetObjectSet<Objectype>(QueryString); foreach (Objectype obj in obs) { Add(obj); } } catch (Exception ex) { throw new Exception("构造对象集合错误,原因:数据库错误或者没有需要的对象\n" + ex.ToString()); } } }
|
属性访问器的代码片断:
private MyObjects<Orders> myVar;
public MyObjects<Orders> orders { get { MyObjects<Orders> or = new MyObjects<Orders>("customerID='" + this.iD + "'"); return or;
} set { myVar = value; } } |