C# 获取参数传递的对象的Id时出现问题
获取通过参数传递的对象的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
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);