我将ASP.NET MVC5与EF6一起使用并使用代码优先方法。
我在模型中有一个属性,我需要告诉EF6不是外键:
public class LogEntry
{
public int ID { get; set; }
public int LogDayID { get; set; }
public int LogEntryTypeID { get; set; }
public int DepartmentID { get; set; }
public DateTime Clock { get; set; }
public string Text { get; set; }
public virtual LogDay LogDay { get; set; }
public virtual LogEntryType LogEntryType { get; set; }
public virtual Department Department { get; set; }
}
[NotMapped]
public class Department
{
public int ID { get; set; }
public string Title { get; set; }
}
模型部门有[NotMapped],因为这个模型不应该存储在数据库中。
我认为这足以让EF6意识到LogEntry中的DepartmentID不应该是外键..但是它会让我错误地认为部门'未映射。
编辑:即使我从LogEntry中删除了DepartmentID,它仍会抱怨上述错误。
这里有完整的错误消息:
"类型' SupervisorLogWeb.Models.Department'没有映射。使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型。验证类型是否已定义为类,不是原始类型还是通用类型,并且不从EntityObject继承。"
答案 0 :(得分:0)
同时将NotMapped属性添加到DeparmentID
属性。此属性也可以应用于属性。
当你的所有映射都基于约定时,EF(或任何工具)无法真正判断你是故意破坏了会议还是犯了错误。它可以应用一些启发式方法,但最好是失败并询问程序员而不是实现不需要的映射。
答案 1 :(得分:0)
显然,您的ComplexType被发现为实体 - 如果您决定将以前的实体重构为ComplexType,则会发生这种情况。
模型构建器将根据它在DbContext中的存在与否来决定某个类型是否为实体(或多或少)。
因此,请检查您的类是否仍然在Context中定义为DbSet并进行相应调整。