C# 中多个实体类的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 中多个实体类的问题相关的知识,希望对你有一定的参考价值。

举的简单点吧!学生类姓名,班级号,班级类班级号,班级名
现在从数据库中返回的是姓名,班级名,没有对应的实体类,采用数据记录,不是数据表接收数据。
我采用了
组合

学生类 ;
班级类;

的方式,但是提示未将对象引用设置到对象实例中

public class Class2

Class1 kk = new Class1();

public class class3

class2 k=new class2();
k.访问不到


看上面你写的:public class Class2

Class1 kk = new Class1();
这句话是什么意思呀,你在搞什么,懂OO不?我擦!!!!
class2 k=new class2();
k.访问不到
上面这一句你又想访问什么什么,class2类中既没属性也是没有方法。哥来教你写吧,很简单的,看下面:
public class MyClass

public string Cno get; set; //班号
public string Cname get; set; //班级名称

public class Student

public string Sno get; set; //学号
public string Sname get; set; //姓名
public string Cno get; set; //班号

public class Combination

public MyClass ComClass get; set;
public Student ComStudent get; set;

这样你每次new Combination时,就会new 一个班级类和一个学生类。不知道你这样组合顶什么用,估计是顶个鸟。哥再教你写个实用的吧。
public class Student

public string Sno get; set; //学号
public string Sname get; set; //姓名

public class MyClass

public string Cno get; set; //班号
public string Cname get; set; //班级名称
public System.Collections.Generic.List<Student> StudentsList get; set; //在该班级下的学生清单


public class Combination

/// <summary>
/// 使用方法
/// </summary>
public void UseWay()

Student s1=new Student()

Sno="2010137331",
Sname="小王"
;
Student s2=new Student()

Sno="2010137332",
Sname="小张"
;
Student s3=new Student()

Sno="2010137333",
Sname="小李"
;
System.Collections.Generic.List<Student> list=new List<Student>()s1,s2,s3;
MyClass myclass = new MyClass()

Cno = "3333",
Cname = "计算机",
StudentsList = list
;

参考技术A 你的“组合”内如果包含学生类、班级类,是需要实例化的。也即是new 学生类()、new 班级类()追问

我想过,可是还不会,
public class Class1

private string _k;
public string K

set _k = value;
get return _k;


public class Class2

Class1 kk = new Class1();

public class class3

class2 k=new class2();
k.访问不到

C# 实体框架 DBContext

【中文标题】C# 实体框架 DBContext【英文标题】:C# Entity Framework DBContext 【发布时间】:2017-05-14 20:39:51 【问题描述】:

我正在尝试学习 Code First EF6,但我对 DBContext 感到困惑。

我将处理的数据库包含 800 多个表,而在处理应用程序的特定部分时,我只处理 1-10 个表。

所以我的问题是;没有涉及 800 多个类的 DBContext 会对系统资源产生很大的负面影响吗?

我想我是这项技术的新手,并且对我在研究过程中获取的信息的实际含义感到困惑。

谢谢。

注意:感谢您的意见。请看这个帖子:Using multiple DbContexts with a generic repository and unit of work。那里说我不能在相互关联的不同上下文中拥有表格?!

但在现实世界的场景中,我的理解是,在重点区域分解表关系是很常见的,这在 Code First EF 中是如何完成的?再次感谢。

【问题讨论】:

只需使用 DB first 方法并导入所需的实体。 您不希望一个模型包含 800 多个表格对象。您可以有多个 dbcontext 模型。您可以创建一个模型来处理员工,另一个模型用于处理课程或您的项目涉及的任何其他领域 更新了我的答案 【参考方案1】:

更新

如果您使用存储库模式,则不能创建多个 DbContext,您创建一个泛型,并将其传递给您的通用存储库,如下所示:

public class Repository<T> : IRepository<T>
    where T : EntityBase

    internal MyDbContext context;
    internal DbSet<T> dbSet; 

    public Repository()
    
        context = new MyDbContext();
        this.dbSet = context.Set<T>(); 
    
    public void Add(T entity)
    
        dbSet.Add(entity);
    
    public void Delete(T entity)
    
        dbSet.Remove(entity);
    
    public void Delete(int id)
    
        dbSet.Remove(dbSet.Find(id));
    
    public T GetById(int id)
    
        return dbSet.Find(id);
    
    public IEnumerable<T> GetAll()
    
        return dbSet.AsEnumerable();
    
    public void Update(T entity)
    
        dbSet.Attach(entity);
        context.Entry(entity).State = EntityState.Modified;
    
    public void Save()
    
        context.SaveChanges(); 
    

您也应该在其中包含您的 DbSet。


如果您正在执行 EF Code-First,那么您可以根据需要的数量来设计 POCO 类,但仅此而已。但根据您对800 表的看法,我认为您可能更想尝试Database-First 方法。我建议你这个article 非常仔细,因为它解释了你需要的一切。

更新:

如果您从数据库优先处理此问题:Ado.NET Entity Model 为您创建 DbContext!如果您仔细查看 .Edmx 文件,它基本上就是您的 POCO 类。

现在,如果您尝试代码优先方法,假设您有这个 DbContext 类:

public class MyDbContext : DbContext

    public MyDbContext()
        : base("name=MyConnection")
    
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, YourApplication.Migrations.Configuration>("MyConnection")); 
    
    //Every time you need to add new Table you add them here.
    public DbSet<Users> Users  get; set; 

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    
        //And Map them here
        modelBuilder.Configurations.Add(new UsersMap());
    

您只需将新的DbSet&lt;Class&gt; 添加到您的DbContext,如下所示:

    public DbSet<POCO CLASS> CLASS  get; set; 

等等,我通常为我在 MVC 应用程序中的每个 Area 创建一个 DbContext。所以你可以像Admin Area -> AdminDbContext 等等。

【讨论】:

我发现令人困惑的是;我们有一个容器应用程序,其中有许多组件(客户/员工记录、课程、商务日历、高尔夫......),所以我如何从这个角度开发应用程序,即我们是否不断向 DBContext 添加新类随着我们需求的增长?谢谢。 @Guygar 让我给你举个例子。过几分钟再回来看看【参考方案2】:

您只需要在 db 上下文中使用的表(如果 db 已经存在)。您需要包含所有表的数据库上下文的唯一原因是您想从头开始重新创建整个数据库。

看看来自 DDD 的有界上下文模式:http://martinfowler.com/bliki/BoundedContext.html

【讨论】:

很好的链接!专注于我的问题的全部内容。您能否指出关于它在 Code-First Entity Framework 环境中实现的正确方向?谢谢。 msdn.microsoft.com/en-us/magazine/…

以上是关于C# 中多个实体类的问题的主要内容,如果未能解决你的问题,请参考以下文章

实体类的理解

C#实体类的关联运用

JSON C# Class Generator ---由json字符串生成C#实体类的工具

C#实体类与XML相互转换

c#遍历并判断实体或类的成员属性

C#如何使用VS2005自动创建实体类?