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; }
}

}

你能帮忙解释一下为什么新类型不能和它的基础同名吗?

4

3 回答 3

0

我认为您不能在主要会议旁边写课程。您必须将其分离到另一个 cs 文件中。我通过这样做解决了这个问题。值得一试

于 2013-04-25T19:15:47.223 回答
0

EF 具有相当复杂的多层映射,其中一些层在外部不直接可见。这是将对象映射到 EDM 中的实体表示的问题。关键是 EF 没有使用完整的类名(包括命名空间),而只使用了裸类名,因此您的Person类发生冲突,只有一个可以解决。

这种行为的起源可能是在 EF 4.0 中,当时它用于简化 POCO 模型的类创建并使命名空间独立于 EDMX。

于 2013-03-20T09:22:55.360 回答
0

我将专注于嵌套在错误中的关键字。我确信将其从 EfTest2 命名空间中取出并保持命名空间相同将解决此问题。当然,您必须将基类名称从 Person 更改为其他名称。

于 2013-03-19T20:59:33.953 回答