C# 获取参数传递的对象的Id时出现问题

C# 获取参数传递的对象的Id时出现问题,c#,.net,asp.net-mvc,entity-framework,C#,.net,Asp.net Mvc,Entity Framework,获取通过参数传递的对象的Id时遇到问题 守则: private void SetEntityState(TEntity entity, EntityState entityStated) { var entry = this.Context.Entry(entity); if (entry.State == EntityState.Detached) { // The problem is here. TEntity attachedEn

获取通过参数传递的对象的Id时遇到问题

守则:

private void SetEntityState(TEntity entity, EntityState entityStated)
{
    var entry = this.Context.Entry(entity);

    if (entry.State == EntityState.Detached)
    {
        // The problem is here.
        TEntity attachedEntity = this.DbSet.Where(
            x => x.Id.Equals(entity.Id)
            ).FirstOrDefault();

        if (attachedEntity != null)
        {
            var attachedEntry = this.Context.Entry(attachedEntity);

            attachedEntry.CurrentValues.SetValues(entity);

            attachedEntry.State = entityStated;
        }
        else
        {
            entry.State = entityStated;
        }
    }
}
问题在于:

    TEntity attachedEntity = this.DbSet.Where(
        x => x.Id.Equals(entity.Id)
        ).FirstOrDefault();
“entity”的属性“Id”总是返回0,但在debbug中,我可以看到值是3

为什么会发生这种情况?

试试这个

 TEntity attachedEntity = this.DbSet.Where(x => x.Id == entity.Id).FirstOrDefault();

也许您可以尝试(进行测试):

而不是

var entry = this.Context.Entry(entity);

为什么使用x.Id.Equals(entity.Id)而不是通常的==?因为我不确定Equals方法是否能够通过实体框架成功地转换为SQL。嗨,我尝试了这个方法,但没有成功。嗨,“Find”不是上下文方法。上下文是继承DbContext的类。请检查更新的代码。。我已经尝试了这两种方法,两种方法都很好,我发现了问题,我有一个基本模型和一个模型继承了这个模型,名称为“Contact”,我必须在这两个类中使用属性“Id”,然后.NET返回0。我删除了类“Contact”中的“Id”属性,只保留了基本模型中的“Id”。但无论如何,我感谢你的帮助。
var entry = Context.Find(entity); 
var entry = this.Context.Entry(entity);