2014-06-17 75 views

回答

0

最好的方法是,你需要添加一個主鍵。

爲什麼EF需要您添加PK? 因爲,PK是表中唯一標識行的方法,如果不存在PK,表中可能有許多相同的行(如果有PK,則不同,PK是唯一的,每行都會不同),所以如果你想刪除或更新,哪一行是你的目標?如果不存在PK,EF無法知道如何識別該行,所以您必須在表中包含PK。

如果您不能添加一個(可能是來自客戶的數據庫,您沒有權限),則可以更改EF和DB之間的映射XML文件,爲唯一表添加相關PK元素柱。

0

我不確定此解決方案是否適用於ef數據庫,但您可以測試。雖然實體沒有主鍵 ,但您可以使用其他字段進行比較。只需重寫GetHashCode方法即可。這裏有一個例子:

public class Organisation 
{ 
    public string Name { get; set; } 
    public string Country { get; set; } 

    public override int GetHashCode() 
    { 
     unchecked 
     { 
      int multiplier = 31; 
      int hash = GetType().GetHashCode(); 

      hash = hash * multiplier + (Name == null ? 0 : Name.GetHashCode()); 
      hash = hash * multiplier + (Country == null ? 0 : Country.GetHashCode()); 

      return hash; 
     } 
    } 
} 

這是一篇博客文章Entity Framework with overriding methods GetHashCode and Equals

相關問題