使用表每类型继承时无法添加数据 [英] Unable to add data while using Table Per Type Inheritance
问题描述
您好。在我的模型中,我有一个名为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屋!