一个关于类调用问题。应该比较简单。高手帮忙。很急。满意的话会加分。谢谢!在线等!

xaocker 2011-07-15 03:33:03
首先,看类定义: Persons为一个实体类。

public class IMSDB
{
  public DBSet<Person> Persons { get; set; }
}

public class DBSet<TEntity>
{
   public bool Del(int id)
  {
    return true;
  }
}

在调用的地方:

IMSDB IMSDB = new IMSDB();
IMSDB.Persons.Del(1);

我想以IMSDB.Persons.Del(1);这种方式调用,但现在这种肯定不行,会说没有实例化。如果改成静态的,会报错:请改用类型名来限定它,我只想用IMSDB.Persons.Del调用而不加限定,请问用什么方法能实现这种调用方式?非常感谢。

好像可以通过IMSDB继承一个类来实现DBSet的实例化,类似于EF中继承的DBContext就可以实现这个效果,但我不明白他的原理,请问具体怎么做呢?
...全文
155 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xaocker 2011-08-03
  • 打赏
  • 举报
回复
顶一下。
xaocker 2011-07-25
  • 打赏
  • 举报
回复
有高手出面解决问题吗?
  • 打赏
  • 举报
回复
public class IMSDB
{
  public DBSet<Person> Persons { get; set; }
public IMSDB()
{
persons=new dbset<person>();
}
}
IMSDB imsdb = new IMSDB();
imsdb.Persons.Del(3); 这个就可以啊
有兴趣的朋友可以加入net开源交流群,共同探讨学习69594961
xaocker 2011-07-20
  • 打赏
  • 举报
回复
MusicStoreEntities的构造函数 里不用实例化的。哪位高手去反编译一下EF框架,帮我看看实现的方法。主要是DBSet和DbContext 类,我发现继承DbContext 后就可以不用实例化了,不继承的时候依然报错。回复windowslinuxjavanet我就是想不实例化直接调用。如何在继承的DbContext类里实现?
我姓区不姓区 2011-07-19
  • 打赏
  • 举报
回复
那你看过MusicStoreEntities的构造函数了吗?
xaocker 2011-07-19
  • 打赏
  • 举报
回复
举个EF中的例子吧,在MusicStore中
using System.Data.Entity;
public class MusicStoreEntities : DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<Genre> Genres { get; set; }
}
调用的时候只需要
MusicStoreEntities obj = new MusicStoreEntities();
obj.Albums.Create();
Albums是普通的实体类,并没有实例化,也可以调用Create();方法,具体实现原理是什么呢?


xaocker 2011-07-19
  • 打赏
  • 举报
回复
就没有别的方法了吗? 我反编译 EF中的DBContext和DbSet类 也没有在这两个地方实例化 用什么方式调用的呢?求解答,有正确答案要多少分都行。
huangwenquan123 2011-07-15
  • 打赏
  • 举报
回复
那就在IMSDB的构造函数初始化
public class IMSDB
{
  public DBSet<Person> Persons { get; set; }
public IMSDB()
{
persons=new dbset<person>();
}
}
IMSDB imsdb = new IMSDB();
imsdb.Persons.Del(3);
xaocker 2011-07-15
  • 打赏
  • 举报
回复
关键是,我不想实例化,能否隐藏这个过程或放到继承的类里面。类似EF中的DBContext的操作。
我姓区不姓区 2011-07-15
  • 打赏
  • 举报
回复
IMSDB imsdb= new IMSDB();// 不要把变量名定义成与类名一样
imsdb.Persons = new DBSet<Person>(); //使用前要先实例化
//....
imsdb.Persons.Del(1);
xaocker 2011-07-15
  • 打赏
  • 举报
回复
我在IMSDB类的构造函数里写了个反射实例化、但是item.SetValue(t, o, null);的时候报错,请教下应该怎么写?这些实例化的操作能否放到DBController里进行?谢谢。

public class IMSDB : DBController
{
public DBSet<Memo> Memos { get; set; }
public DBSet<Person> Persons { get; set; }
public DBSet<User> Users { get; set; }

public IMSDB()
{
//Persons = new DBSet<Person>();
var type = this.GetType();
//反射解析 获取成员列表
System.Reflection.PropertyInfo[] properties = type.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
if (properties.Length > 0)
{
foreach (System.Reflection.PropertyInfo item in properties)
{
Type t = item.PropertyType.GetGenericArguments()[0]; //泛型中实体的类型
object o = t.GetConstructor(new Type[0]).Invoke(new object[0]); //实例化实体类

item.SetValue(t, o, null);
}}}
xaocker 2011-07-15
  • 打赏
  • 举报
回复
没有人帮忙解答吗?

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧