使用表每类型继承时无法添加数据 [英] Unable to add data while using Table Per Type Inheritance

查看:73
本文介绍了使用表每类型继承时无法添加数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好。在我的模型中,我有一个名为Person and Learner的实体,而Teacher则从Person继承。当我尝试为学习者添加数据时:



 使用 var  db =  new  SCSOMLAModelContext())
{
var learner = new 学习者
{
FirstName = firstName,
MiddleName = middleName ,
LastName = lastName,
UserId = 1
RegistrationNumber = registrationNumber
};

db。

}



上下文对象db,似乎不包含有关继承类型的信息:



  public   class  SCSOMLAModelContext:DbContext 
{
public SCSOMLAModelContext();

public virtual DbSet< Person>人{获取; set ; }
public virtual DbSet< User>用户{获取; set ; }

受保护 覆盖 void OnModelCreating(DbModelBuilder modelBuilder);
}





我使用Model First方法,没有这个实体(学习者和老师),我无法添加数据给他们。在我的数据库中,我将这些表格显示为People_Learner和People_Teacher。



请协助如何将数据添加到此表中,我完全陷入困境。为什么这两个实体(学习者和教师)不在DbContext上?我正在使用VS2013。

解决方案

你应该这样写..

  using  var  db =  new  SCSOMLAModelContext())
{
var learner = new 学习者
{
FirstName = firstName,
MiddleName = middleName,
LastName = lastName,
UserId = 1
RegistrationNumber = registrationNumber
};

db.Learners.AddObject(学习者);
db.SaveChanges();

}





这会将记录插入学习者表格。


< blockquote>问题在于,正如我所说,Model First不会在DbContext中添加派生类(Learner和Teacher)。我为DbContext继承类所做的更改是:



  public   partial   class  SCSOMLAModelContext:DbContext 
{
public SCSOMLAModelContext()
base name = SCSOMLAModelContext
{
}

protected < span class =code-keyword> override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<学习者>()。ToTable( User);
modelBuilder.Entity< Teacher>()。ToTable( Person);

}

public virtual DbSet< User>用户{获取; set ; }
public virtual DbSet< Person>人{获取; set ; }
public virtual DbSet< Learner>学习者{获取; set ; }
public virtual DbSet< Teacher>教师{获取; set ; }

}





它有效! : - )

Hi. In my model, I have an entity called Person and Learner and Teacher inherit from Person. When I attempt to add data for a Learner as thus:

using (var db = new SCSOMLAModelContext())
            {
                var learner = new Learner
                {
                    FirstName = firstName,
                    MiddleName = middleName,
                    LastName = lastName,
                    UserId = 1,
                    RegistrationNumber = registrationNumber
                };

                db.

            }


the context object "db", seem not to contain information about the inheritance types as thus:

public class SCSOMLAModelContext : DbContext
    {
        public SCSOMLAModelContext();

        public virtual DbSet<Person> People { get; set; }
        public virtual DbSet<User> Users { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder);
    }



I am using Model First approach and without this entities (Learner and Teacher), I am unable to add data to them. In my database, I have this tables available as "People_Learner", and "People_Teacher".

Please assist on how to add data to this tables, I am totally stuck. And why are these two entities (Learner and Teacher) not on DbContext? I am using VS2013.

解决方案

you should write like this..

using (var db = new SCSOMLAModelContext())
            {
                var learner = new Learner
                {
                    FirstName = firstName,
                    MiddleName = middleName,
                    LastName = lastName,
                    UserId = 1,
                    RegistrationNumber = registrationNumber
                };

                db.Learners.AddObject(learner);
                db.SaveChanges();

            }



this will insert record to the Learner table.


The problem is that, as I had said, Model First does not add the derived classes (Learner and Teacher) in DbContext. The changes I made for the DbContext inheriting class is this:

public partial class SCSOMLAModelContext : DbContext
    {
        public SCSOMLAModelContext()
            : base("name=SCSOMLAModelContext")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Learner>().ToTable("User");
            modelBuilder.Entity<Teacher>().ToTable("Person");
        }

        public virtual DbSet<User> Users { get; set; }
        public virtual DbSet<Person> People { get; set; }
        public virtual DbSet<Learner> Learners { get; set; }
        public virtual DbSet<Teacher> Teachers { get; set; }
    }



It works! :-)


这篇关于使用表每类型继承时无法添加数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆