我对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:
根据评论的要求,我正在显示出现问题的课程:
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
}
如您所见,我有两个导航属性。一个由数据注释(P029)设置,另一个(P030)由FluentAPI设置在其他地方。 在我的WPF窗口中,我有两个ComboBox,每个导航属性一个。当我更改de“P029”时,ChangeTracker返回1个更改的条目,但是当我更改de“P030”时,没有任何反应。
答案 0 :(得分:0)
我找到了解决方案。而不是使用:
var t = this.Context.ChangeTracker.Entries()
.Where(c => c.State == EntityState.Modified ||
c.State == EntityState.Added ||
c.State == EntityState.Deleted);
return t.Any();
我用过:
return this.Context.ChangeTracker.HasChanges();
现在一切正常。