【发布时间】:2016-07-03 06:17:40
【问题描述】:
我正在尝试使用自定义 getter 和 setter 更新实体,但如果我编辑实体上的任何其他属性,它们不会被保存。我有一个 DTO,它映射到检索到的实体。
DTO:
public class MyEntityDto
{
public string Id { get; set; }
public string Name { get; set; }
public bool Enabled { get; set; }
public Dictionary<string, string> Settings { get; set; }
}
实体:
public class MyEntity
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual bool Enabled { get; set; }
public Dictionary<string, string> Settings { get; set; }
public virtual string SettingsJson
{
get { return JsonConvert.SerializeObject(Settings); }
set
{
Settings = JsonConvert.DeserializeObject<Dictionary<string, string>>(value);
}
}
}
更新功能:
public async Task UpdateAsync(dto MyEntityDto)
{
var existingEntity = await _myRepository.GetByIdAsync(dto.Id);
existingEntity.Name = dto.Name;
existingEntity.Enabled = dto.Enabled;
existingEntity.Settings = dto.Settings;
await _myRepository.Update(existingEntity);
// save changes happens at end of request
}
我的SettingsJson 没有更新。我已经完成了它,existingEntity.SettingsJson 和 existingEntity.Settings 都有正确的数据。 Name 和 Enabled 会更新。
但是,如果我删除 Name 和 Enabled 的分配,SettingsJson 确实会更新。
它确实适用于实体创建,但不适用于更新。我还想指出我无权访问DbContext。
【问题讨论】:
-
我注意到在你的实体类中,除了字典对象之外,所有的实体类都被声明为虚拟的。
-
@bilpor EF 无论如何都不支持字典,因此它不会存储在数据库中。
-
QueueSettings是什么? -
@RuudLenders 抱歉只是想说
Settings。
标签: c# entity-framework getter-setter