Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
522 views
in Technique[技术] by (71.8m points)

c# - Multiple collections of same type in entity framework

I have these two very simple classes.

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
}

public class Group
{
    public int Id {get;set;}
    public ICollection<Person> Teachers { get; set; }
    public ICollection<Person> Students { get; set; }
}

I would like EF to keep Teachers seperated from Students however they both get jumbled into a Person table with no way to distinguish between them.

Any ideas?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

There are two ways to do it;

first : use a tag or enums in the Person object

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
    public bool IsFaculty { get; set; }
}

or

public enum PersonType { Teacher, Student }; 

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
    public PersonType PropPersonType { get; set; }
}

second : work object oriented with inheritance. This method has my preference because it's easy to manage and expand if you want to expand it.

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
}


public class Student : Person
{
    public int Year { get; set; }
    // other student related fiels.
}


public class Teacher : Person
{
    public List<Course> Courses { get; set; }
    // other teacher related fields
}

Your Group is then

public class Group
{
    public int Id {get;set;}
    public ICollection<Teacher> Teachers { get; set; }
    public ICollection<Student> Students { get; set; }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...