【发布时间】:2016-06-24 21:49:07
【问题描述】:
我在使用 DbContext 的 ChangeTracker 时遇到了问题。 我有一个用外键的属性和数据注释定义的模型。出于业务原因,我不得不为 FluentAPI 更改它,从那时起,ChangeTracker 不再识别导航属性的更改。
当我调用 SaveChanges() 时,标量属性工作得很好,并且导航属性保存在数据库中,但是当我尝试执行以下操作时:
var t = this.Context.ChangeTracker.Entries().Where(
c => c.State == EntityState.Modified ||
c.State == EntityState.Added ||
c.State == EntityState.Deleted
);
调用 t.Any() 总是返回 false。
有没有办法解决这个问题,否则我将不得不返回数据注释?
提前致谢。
编辑 1:
根据 cmets 的要求,我正在展示一个出现问题的类:
public class C016
{
#region Fields
private string _c016Codigo;
private string _c016Descricao;
private P029_TipoUnidadeMedida _p029TipoUnidadeMedida;
private P030_TipoMetricaUnidadeMedida _p030TipoMetricaUnidadeMedida;
#endregion
#region Public Properties
public virtual ObservableCollection<C015_Produto_DadosFiscais> C015_Produto_DadosFiscais { get; set; }
/// <summary>
/// Código da Unidade de Medida
/// </summary>
[Required, MaxLength(6)]
[Column(TypeName = "varchar")]
public string C016_Codigo
{
get { return this._c016Codigo; }
set
{
if (value == this._c016Codigo) return;
this._c016Codigo = value;
}
}
/// <summary>
/// Descrição da Unidade de Medida
/// </summary>
[Required, MaxLength(60)]
[Column(TypeName = "varchar")]
public string C016_Descricao
{
get { return this._c016Descricao; }
set
{
if (value == this._c016Descricao) return;
this._c016Descricao = value;
}
}
/// <summary>
/// Código da Unidade de Medida, Autonumerador
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int C016_Id { get; set; }
public byte P029_Id { get; set; }
/// <summary>
/// Tipo da Unidade de Medida, Fracionário ou Inteira
/// </summary>
[ForeignKey("P029_Id")]
public virtual P029_TipoUnidadeMedida P029_TipoUnidadeMedida
{
get { return this._p029TipoUnidadeMedida; }
set
{
if (Equals(value, this._p029TipoUnidadeMedida)) return;
this._p029TipoUnidadeMedida = value;
}
}
/// <summary>
/// Tipo de métrica da Unidade de medida
/// </summary>
[Required]
public virtual P030_TipoMetricaUnidadeMedida P030_TipoMetricaUnidadeMedida
{
get { return this._p030TipoMetricaUnidadeMedida; }
set
{
if (Equals(value, this._p030TipoMetricaUnidadeMedida)) return;
this._p030TipoMetricaUnidadeMedida = value;
}
}
#endregion
}
如您所见,我有两个导航属性。一个由 Data Annotations (P029) 设置,另一个 (P030) 由 FluentAPI 设置在其他位置。 在我的 WPF 窗口中,我有两个组合框,每个导航属性一个。当我将 de "P029" 更改为 1 时,ChangeTracker 返回 1 个更改的条目,但是当我将 de "P030" 更改为 1 时,什么也没有发生。
【问题讨论】:
-
你能展示一个数据注释映射与流利的例子吗?以及应该更改导航属性的代码?
标签: c# entity-framework