【发布时间】:2016-04-07 22:40:30
【问题描述】:
我有以下BaseballDbContext 类:
public class BaseballDbContext : DbContext
{
public DbSet<BaseballTeam> teams { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Hitter>();
modelBuilder.Entity<Pitcher>();
}
}
我的模型类是:
public class BaseballTeam
{
public int Id { get; set; }
public string teamName { get; set; }
public List<BaseballPlayer> players { get; set; }
}
public abstract class BaseballPlayer
{
public int Id { get; set; }
public int age { get; set; }
public string name { get; set; }
}
public class Hitter : BaseballPlayer
{
public int homeruns { get; set; }
}
public class Pitcher : BaseballPlayer
{
public int strikeouts { get; set; }
}
最初在玩家表中播种数据:
现在我想更新其中一位击球手的name 和homeruns 属性:
BaseballTeam team = _ctx.teams.Include(q => q.players).FirstOrDefault();
Hitter hitter = team.players.OfType<Hitter>().FirstOrDefault();
hitter.name = "Tulowitzki"; //that property will be updated
hitter.homeruns = 399; //but that will not :(
int i = team.players.FindIndex(q => q.Id == hitter.Id);
team.players[i] = hitter;
_ctx.Update(team);
_ctx.SaveChanges();
在我运行代码后,只有玩家的名字得到了更新,而不是 homeruns 属性:
如何更新子类和父类的属性?
【问题讨论】:
-
你不需要
DbSet<BaseballPlayer>吗?见here -
不,我不需要它。它是一个抽象类。
-
这可能值得一试:
_ctx.Entry(team).State = EntityState.Modified把它放在更新调用之前。 -
试过了,可惜没有解决问题。
-
据我了解,该问题已经修复,将在下一个版本中提供github.com/aspnet/EntityFramework/commit/…
标签: c# asp.net entity-framework entity-framework-core