【发布时间】:2017-05-10 18:10:02
【问题描述】:
我有一个类Character,它的属性是基元和复杂对象的混合,其中一些对象的属性也是复杂对象。所有这些都在数据库中表示,每个类都有自己的表,通过 EFCore Code First 生成。
这是我要完成的一个较小的示例:
public class Character
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public string Race { get; set; }
public DeathSaves DeathSaves{ get; set; }
public SavingThrows SavingThrows { get; set; }
}
public class DeathSaves
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public bool? Success1 { get; set; }
public bool? Success2 { get; set; }
public bool? Success3 { get; set; }
public bool? Failure1 { get; set; }
public bool? Failure2 { get; set; }
public bool? Failure3 { get; set; }
}
public class SavingThrows
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public SavingThrow Strength { get; set; }
public SavingThrow Dexterity { get; set; }
public SavingThrow Constitution { get; set; }
public SavingThrow Intelligence { get; set; }
public SavingThrow Wisdom { get; set; }
public SavingThrow Charisma { get; set; }
}
public class SavingThrow
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public bool? Proficient { get; set; }
public int? Value { get; set; }
}
正如您在上面看到的,我的Character 类包含DeathSaves,它是一个基元对象,SavingThrows 是一个包含多个属性的对象,这些属性都是SavingThrows。
我知道在我的控制器中,我已经尝试过
var dbchar = _context.Characters.SingleOrDefault(x => x.Id == character.id);
dbchar = character;
_context.SaveChanges();
character 是从客户端发送的,但这不会更新数据库中的任何内容。我也尝试过_context.Characters.Attach(character),但这似乎也没有更新任何东西。我在这里做错了什么?
【问题讨论】:
-
“但这不起作用”可以在edit中使用一些详细说明
-
对不起,我把它编辑得更清楚了
-
仅仅因为你改变了一个变量指向
dbchar = character;的对象并不意味着上下文有任何线索你在做什么。您需要更新存储库中的实例。我不是 100% 确定应该如何完成,但可以肯定的是,如果您将dbchar的每个属性(和子对象属性)设置为characterTHENSaveChanges中的相应值(或者无论如何应该更新工作——也许附加然后保存更改?我不知道)应该工作......
标签: c# entity-framework entity-framework-core