如何对模型进行子类化并保存其他数据?

时间:2014-07-17 19:22:16

标签: c# asp.net asp.net-mvc entity-framework

在我的应用程序中,对我来说是有意义的(对我而言),我这样做了:

public class User
{
    public string eRaiderUsername { get; set; }
    public int AllowedSpaces { get; set; }
    public ContactInformation ContactInformation { get; set; }
    public Ethnicity Ethnicity { get; set; }
    public Classification Classification { get; set; }
    public Living Living { get; set; }
}

public class Student : User
{
    public Student()
    {
        AllowedSpaces = AppSettings.AllowedStudentSpaces;
    }
}

public class OrganizationRepresentative : User
{
    public Organization Organization { get; set; }

    public OrganizationRepresentative()
    {
        AllowedSpaces = AppSettings.AllowedOrganizationSpaces;
    }
}

预订模式会发生唯一存储User(或StudentOrganizationRepresentative)ID的关系:

public class Reservation
{
    public int ID { get; set; }
    public int SpaceNumber { get; set; }

    public virtual Game Game { get; set; }
    public virtual User User { get; set; }

    public Reservation() { }
}

以下是目前的情况:

public class MyContext: DbContext
{
    public MyContext() : base("ApplicationConnection")
    {
    }

    public DbSet<Configuration> Configurations { get; set; }
    public DbSet<Game> Games { get; set; }
    public DbSet<Organization> Organizations { get; set; }
    public DbSet<Reservation> Reservations { get; set; }
}

我实际上还没有开始在我的数据库中保存Users或尝试将Reservation连接到User(尚未)。

在处理用户子类(StudentOrganizationRepresentative)时,应用程序是否应单独存储每个用户子类?如何在预订和用户之间创建关系,以及如何为UsersStudentsOrganizationRepresentatives设置数据库上下文(取决于方法)? < / p>

2 个答案:

答案 0 :(得分:2)

作为OO程序员,很容易陷入从彼此派生类开始“专业化”的陷阱,并开始定义“角色”。当引入多个角色时,或者当员工从他工作的公司购买汽车并成为员工和客户时,这种情况会很快失败。怎么办?

答案是将角色与执行角色的人分开。无论您是使用标记执行此操作,还是将人们链接到“角色”,“目的”或任何您想要调用它的多对多表,都取决于您。

基于角色的场景中的继承几乎总是在你尝试复古的时候流下眼泪。花时间现在来修复它。

答案 1 :(得分:0)

ef应对各种可能性。

Table per Type

Table per Hierarchy

了解保存和检索数据,了解其工作原理以及最适合的数据。 以最适合您的方式使用OO