实体框架6 - 如何将属性标记为非外键

时间:2015-01-19 13:55:13

标签: asp.net-mvc entity-framework

我将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继承。"

2 个答案:

答案 0 :(得分:0)

同时将NotMapped属性添加到DeparmentID属性。此属性也可以应用于属性。

当你的所有映射都基于约定时,EF(或任何工具)无法真正判断你是故意破坏了会议还是犯了错误。它可以应用一些启发式方法,但最好是失败并询问程序员而不是实现不需要的映射。

答案 1 :(得分:0)

显然,您的ComplexType被发现为实体 - 如果您决定将以前的实体重构为ComplexType,则会发生这种情况。

模型构建器将根据它在DbContext中的存在与否来决定某个类型是否为实体(或多或少)。

因此,请检查您的类是否仍然在Context中定义为DbSet并进行相应调整。

相关问题