2012-10-11 59 views
1

本週之前我一直沒有使用EF(v5),現在我正在做一些數據庫更改,它正在做一些非常奇怪的事情。實體框架奇怪的行爲

我刪除了一個nvarchar國家字段,取而代之的是與一個外鍵Country表

ALTER TABLE [dbo].[UserProfile] WITH CHECK ADD CONSTRAINT [FK_UserProfile_Countries] FOREIGN KEY([CountryId]) 
REFERENCES [dbo].[Countries] ([Id]) 

更新在VS2012模型的ID列的CountryId INT領域做一些真正unexpecting事情。它報告我刪除的字段有錯誤:

錯誤11010:關聯結束'國家'未映射。

我有兩個虛擬域加入到這似乎不正確的模型:

public partial class UserProfile 
{ 
    public int UserId { get; set; } 
    ... 
    public int CountryId { get; set; } 

    public virtual Country Country { get; set; } 
    public virtual Country Country1 { get; set; } 
} 

我讀過沒有與設計師的錯誤和手動運行「運行自定義工具」 .tt文件修復了這個問題,但似乎沒有奏效。

有沒有人看過這個或解決了它?

+0

你有現成的數據庫還是數據庫與項目一起發展?如果後者是真的,你應該考慮使用EF Code First而不是依賴.tt的東西:http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with- entity-framework-4.aspx或http://www.codeguru.com/csharp/article.php/c19233/Introduction-to-Entity-Framework-Code-First.htm –

+0

它隨着項目一起發展。這位設計師看起來非常笨重,越野車,SQLMetal的工作就像是一種魅力!它使我完全不用EF。 感謝您的鏈接,我現在去讀這 – Jammer

+0

是的,我從來沒有喜歡過設計師。 Code First在EF 4中獲得全面支持(我認爲是這樣),這是一種解脫。沒有模型和圖表,只是sweeeeeet代碼:) –

回答

0

只是爲了我通過對數據庫這麼多時間燒燬記錄首先,我拋棄了一切,寫代碼,而不是...

0

只是爲了測試,我從頭開始完全重新創建了我的模型。刪除所有文件。在從頭開始重新創建模型後,在Country.cs文件中查看,恐嚇了我的生活...如果我的假設是正確的。該下課這樣看:

public partial class Country 
{ 
    public Country() 
    { 
     this.UserProfiles = new HashSet<UserProfile>(); 
    } 

    public int Id { get; set; } 
    public string CountryCode { get; set; } 
    public string CountryName { get; set; } 

    public virtual ICollection<UserProfile> UserProfiles { get; set; } 
} 

如果我對這個假設是出現這看起來可怕的,從性能的角度來看。從看這個班的時候,看起來好像我檢索了一下,說美國的那一行,那麼它也會加載每一個美國作爲國家的檔案......或者我會生氣嗎?設計者今天炒我的大腦......