我收到以下错误:未映射“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 :(得分:0)
我会关注错误中的关键字 嵌套 。我肯定把它从EfTest2命名空间中删除并保持命名空间相同将纠正这个问题。当然,您必须将基类名称从Person更改为其他内容。
答案 1 :(得分:0)
EF具有相当复杂的多层映射,其中一些层在外部不直接可见。这是将对象映射到EDM中的实体表示的问题。关键是EF不使用完整的类名(包括名称空间),而只使用裸名类,因此Person
类处于冲突状态,只能解析一个。
当用于简化POCO模型的类创建并使命名空间独立于EDMX时,此行为的起源可能在EF 4.0中。
答案 2 :(得分:0)
我认为你不能在主会话旁边写课。 您必须将其与另一个cs文件分开。 这样做我解决了这个问题。值得一试