2013-03-19 97 views
0

我收到以下錯誤:類型'EfTest.Person'未映射。使用Ignore方法或NotMappedAttribute數據註釋檢查類型是否未被明確排除。驗證類型是否定義爲一個類,不是原始的,嵌套的或通用的,並且不從EntityObject繼承。具有相同名稱的實體框架和基類型

運行此代碼時:

using System.Data.Entity; 
namespace EfTest 
{ 
internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     using (var db = new PersonContext()) 
     { 
      db.Persons.Add(new Person()); 
      db.SaveChanges(); 
     } 
    } 
} 

public class PersonContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } //people ;) 
} 

public class Person : EfTest2.Person 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
} 
}namespace EfTest2 
{ 
public class Person 
{ 
    public int Age { get; set; } 
} 

}

可以幫助解釋爲什麼新型不能有相同的名稱作爲它的基地?

+0

你用不同的名字試過了嗎? – 2013-03-19 20:53:28

+0

是的,我做的,這就是爲什麼問這個問題 – pokrec 2013-03-20 08:03:06

回答

0

我將重點關注關鍵字嵌套中的錯誤。我確定將它從EfTest2命名空間中取出並保持命名空間相同將解決此問題。當然,你必須將基類名稱從Person更改爲其他的東西。

+0

是的,我知道這一點,我知道如何解決這個問題,但我想知道爲什麼它是這樣的 – pokrec 2013-03-20 07:46:11

0

EF具有相當複雜的多層映射,其中一些層不能直接在外面看到。這是在EDM中將對象映射到其實體表示的問題。問題在於EF沒有使用完整的類名(包括名稱空間),而只使用了純粹的類名,因此您的Person類處於衝突狀態,只能解析一個類。

此行爲的起源可能在EF 4.0中,用於簡化POCO模型的類創建並使命名空間獨立於EDMX。

0

我認爲你不能在主會話旁邊寫上這個類。 你必須將它分離到另一個cs文件。 我通過這樣解決了問題。值得一試

相關問題