c# - 如何在 TPT 映射中更新 Entity Framework 中的依赖表

标签 c# entity-framework entity-framework-5 table-per-type

我有这个模型:

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

public class Student : Person
{
    public string Code { get; set; }
}

和这个上下文:

public class Context : DbContext
{
    public Context()
        : base("Context")
    {
        Database.SetInitializer<Context>(null);
    }

    public DbSet<Student> Students { get; set; }

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

而且我希望能够先插入一个没有代码的 Student 实例,然后在以后的某个时候,我想更新那个 Student 的代码.下面是一个简单的代码解释:

var student = new Student
{
    FirstName = "Saeed",
    LastName = "Nemati",
};
using (var context = new Context())
{
    context.Students.Add(student);
    context.SaveChanges();
}

// A month later I want to update the code
var student2 = new Student
{
    Id = student.Id,
    Code = "something"
};
using (var context = new Context())
{
    context.Students.Attach(student2);
    context.Entry(student2).State = EntityState.Modified;
    context.SaveChanges();
}

问题是,EF 提示应该提供 FirstNameLastName 并且不能为 null。我可以填充 StudentPerson 属性继承的属性,但这听起来很臭。 EF中是否有任何方法或技术可以隔离更新派生类(从属表)?

最佳答案

这很简单。当您修改状态时,student2 Entity Framework 认为 FirstNameLastName 为空。 而是使用:

context.Entry(student2).State = EntityState.Modified;

您应该更改Property:

context.Entry(student2).Property(x => x.Code).IsModified = true;

关于c# - 如何在 TPT 映射中更新 Entity Framework 中的依赖表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21671036/

相关文章:

c# - 解决替换 foreach 循环中的项目

entity-framework - Entity Framework - 如果 SaveChanges 失败并且我不想进行某些更改该怎么办?

entity-framework - 独立类库程序集中的 MVC 4 模型(使用 EF 5)

ef-code-first - 如何在不使用迁移的情况下使用 LocalDB 和 EF

c# - 这个 AppendFormat 有什么值(value)吗?

c# - 连接后如何测试TCPClient连接断开?

c# - 消息 - 更新 Azure 上的函数版本

c# - 错误 Linq to Entities 日期时间

c# - 如何使用带有 .Contains 和重音不敏感的 Entity Framework 搜索字符串

c# - 数据库表为空时如何从数据库中获取最大ID?