使用实体框架的每层次表(TPH)继承

时间:2013-04-12 07:55:45

标签: sql-server entity-framework entity-framework-4 sql-server-2012

我有以下基础(抽象模型):

public abstract class StatusMessage
{
    public int Id { get; set; }

    /// <summary>
    /// Message
    /// </summary>
    /// [Required]
    public string Description { get; set; }

    public DateTime? CreationDate { get; set; }

    public int UseraccountId { get; set; }
    public virtual Useraccount Useraccount { get; set; }
}

此模型源自StatusMessage:

public class ProjectStatusMessage : StatusMessage
{
    public int ProjectId { get; set; }
    public virtual Project Project { get; set; }
}

在我的上下文中,我构建了一个StatusMessage集:

public IDbSet<StatusMessage> StatusMessage { get; set; }

在我的初始化程序中,我尝试构建一个新的项目状态消息并将其保存到数据库中:

var statusMessages = new List<StatusMessage>
{
    new ProjectStatusMessage
    {
        Description = "Test-Project-Status-Message",
        ProjectId = 1,
        UseraccountId = 1
    }                   
};
statusMessages.ForEach(s => context.StatusMessage.Add(s));
context.SaveChanges();

执行代码时,编译器会抛出异常。 与'ProjectStatusMessage_Project'中的插入和外键约束存在冲突。冲突在表'dbo.Project'中,列'Id'。

1 个答案:

答案 0 :(得分:0)

我自己发现了这个问题。 初始化程序中的顺序错误。 我首先创建了projectstatus,然后创建了项目......