我的库中的延迟加载或代理模式
|
嗨,我正在编写一个简单的ORM DLL。该库工作正常,我想添加一些addone-延迟加载。
但是我不知道该怎么实现。我有一个主张。
在我的系统中(我有创建者,但没关系),用户应该创建实现IMapper的DB类并设置mapper类。
有人把这个联系起来。
public class Person
{
public virtual string Name {get;set;}
public virtual int Age {get; set;}
}
public class DataBase : IMapper
{
MapperSet<Person> Persons = new MapperSet<Person>();
}
如果我们拥有该类并设置connectionString,则可以从DB中获取数据。与实体框架非常相似
Person p = Persons.Single(x=>x.Name == \"John\");
在那一刻,我将检查映射类中的所有属性,如果是虚拟的,则不返回该类,而是延迟加载类。
我想出一个构想。 (在该示例中)不返回Person类,而是返回扩展Person类并覆盖所有属性的类。
public class PersonReturn : Person
{
//here i must create a method who really take the data from db
private string Query = \"SELECT TOP(1) FROM Person WHERE Name = \'John\'\";
private Execute()
{
p = (Person)Db.TableToObject(Query);
}
Person p;
public override string Name
{
get
{
if(p == null)
p = Execute();
return p.Name;
}
set {}
}
//same
public override int Age {get; set;}
}
用户使用该类不应看到任何更改(仅在调试时才可能看到其他类),它应该像魔术一样工作:P
我的问题是:
1.如何在实体框架中实现延迟加载,谁知道?
2.从我的主张出发,更简单的方法吗?在我的想法中,我必须使用带有IL源代码的TypeBuilder和Emit-我听到它的属性问题
他们不是通常使用的方式。
没有找到相关结果
已邀请:
2 个回复
届甸衬丝蚕
昧伎
代理工厂必须
custominterceptor必须获取您实体的ID,并在首次使用时实例化A,查询数据库以填充A并将委托委派给A。 必须生成AProxy(后构建或使用TypeBuilder的运行时)