实体框架和具有相同名称的基本类型

时间:2013-03-19 18:56:17

标签: entity-framework-5

我收到以下错误:未映射“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; }
}

}

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

3 个答案:

答案 0 :(得分:0)

我会关注错误中的关键字 嵌套 。我肯定把它从EfTest2命名空间中删除并保持命名空间相同将纠正这个问题。当然,您必须将基类名称从Person更改为其他内容。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为你不能在主会话旁边写课。 您必须将其与另一个cs文件分开。 这样做我解决了这个问题。值得一试