C# EF5删除实体

C# EF5删除实体,c#,entity-framework-5,C#,Entity Framework 5,如何使用EF5删除实体?我得到了这个错误: The object cannot be deleted because it was not found in the ObjectStateManager. 当我尝试呼叫时。在我的数据库集上删除。谷歌搜索之后,我试过了 mycontext.Attach(entity) mycontext.Remove(entity) 但通过这种方式,我得到: An object with the same key already exists in the O

如何使用EF5删除实体?我得到了这个错误:

The object cannot be deleted because it was not found in the ObjectStateManager.
当我尝试呼叫时。在我的数据库集上删除。谷歌搜索之后,我试过了

mycontext.Attach(entity)
mycontext.Remove(entity)
但通过这种方式,我得到:

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
那么,它是否在ObjectStateManager中?!:)

我的实体是这样的:

[Table("Words")]
public class Word : IWord
{
    [Key, Required]
    public int WordId { get; set; }

    [Required, StringLength(50)]
    public string Tag { get; set; }

    //Foreign Key
    public int VocabularyId { get; set; }

    //Navigation
    public virtual Vocabulary Vocabulary { get; set; }
    public virtual Language Language { get; set; }
    public virtual List<Translation> Translations { get; set; }

}
[表格(“文字”)]
公共类单词:IWord
{
[钥匙,必填]
public int WordId{get;set;}
[所需长度(50)]
公共字符串标记{get;set;}
//外键
public int VocabularyId{get;set;}
//航行
公共虚拟词汇表{get;set;}
公共虚拟语言{get;set;}
公共虚拟列表转换{get;set;}
}

<代码> > p>可以考虑2种情况:

1。连接方案:从数据库加载实体并将其标记为已删除

var word = ctx.Words.Where(a=>a.WordId == wordId).First();
ctx.DeleteObject(word);
ctx.SaveChanges();
var word = new Word() { WordId = id };
ctx.Words.Attach(word);
ctx.DeleteObject(word);
ctx.SaveChanges();
2。断开连接的方案:附加现有实体并将其标记为已删除

var word = ctx.Words.Where(a=>a.WordId == wordId).First();
ctx.DeleteObject(word);
ctx.SaveChanges();
var word = new Word() { WordId = id };
ctx.Words.Attach(word);
ctx.DeleteObject(word);
ctx.SaveChanges();

第二种方法有助于避免不必要的数据库往返行程

,可以考虑2种情况:

1。连接方案:从数据库加载实体并将其标记为已删除

var word = ctx.Words.Where(a=>a.WordId == wordId).First();
ctx.DeleteObject(word);
ctx.SaveChanges();
var word = new Word() { WordId = id };
ctx.Words.Attach(word);
ctx.DeleteObject(word);
ctx.SaveChanges();
2。断开连接的方案:附加现有实体并将其标记为已删除

var word = ctx.Words.Where(a=>a.WordId == wordId).First();
ctx.DeleteObject(word);
ctx.SaveChanges();
var word = new Word() { WordId = id };
ctx.Words.Attach(word);
ctx.DeleteObject(word);
ctx.SaveChanges();

第二种方法将帮助您避免不必要的数据库往返

1。对我有用。诚恳地说,我不明白为什么删除一个实体会如此复杂(我责备EF,而不是你:)。。无论如何,非常感谢你。对我有用。诚恳地说,我不明白为什么删除一个实体会如此复杂(我责备EF,而不是你:)。。无论如何,非常感谢你