gpt4 book ai didi

entity-framework - Entity Framework TPT继承编辑基类表中的记录并将其绑定(bind)到子类表

转载 作者:行者123 更新时间:2023-12-05 05:27:12 25 4
gpt4 key购买 nike

在这段代码中,我首先使用代码通过 TPT 继承链接到现有数据库,我有一个名为 Person 的基类和 2 个名为 Student 和 Teacher 的子类,Student 和 Teacher 类都继承自 Person 类

public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }

}
public class Student : Person
{
public int? Payment { get; set; }
}


public class Teacher : Person
{
public int Wage { get; set; }
}

这是我的上下文类

public class PersonContext : DbContext
{
public PersonContext()
: base("TPT")
{
Database.SetInitializer<PersonContext>(null);
}
public DbSet<Person> Persons { get; set; }
public DbSet<Student> Students { get; set; }
public DbSet<Teacher> Teachers { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().ToTable("Persons");
modelBuilder.Entity<Teacher>().ToTable("Teachers");
modelBuilder.Entity<Student>().ToTable("Students");
}
}

我插入了一条包含 FirstName 和 LastName 的记录,并将其保存在 Persons 表中,方法是向上下文中添加一个简单的 Person 实例。因为不知道那个时候的人是什么样的人。在另一个列表中,运算符(operator)识别记录,并尝试向其中添加额外数据(例如为学生添加付款)。我现在应该怎么做?如果我得到那个人的记录并将其转换为 Student 类并尝试更新它,我将收到此错误:

'TablePerTypeInheritance.Models.Person' does not contain a definition for 'Payment' and no extension method 'Payment' accepting a first argument of type 'TablePerTypeInheritance.Models.Person' could be found (are you missing a using directive or an assembly reference?)

最佳答案

您保存类型为 Person 的记录,因此它将始终作为 Person 从数据库中检索。

在 C# 中,您不能将基类转换为派生类。这样的操作是无效的。

var person = new Person();
var student = (Student)Person; // doesn't compile

如果要更改记录的类型,则必须创建所需类型的新对象。

var person = context.Persons.Find(1);
var student = new Student() {
FirstName = person.FirstName,
LastName = pesron.LastName
};

context.Persons.Remove(person);
context.Student.Add(student);

关于entity-framework - Entity Framework TPT继承编辑基类表中的记录并将其绑定(bind)到子类表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21497890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com