2013-03-19 139 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文件。 我通过这样解决了问题。值得一试

相关问题