代码首先尝试在映射ProjectId属性时添加Project_Id列

时间:2015-09-03 03:34:54

标签: c# entity-framework ef-code-first ef-migrations

我在VS2013中使用的是EF Code First,但是无法解决这个问题 我有以下课程:

项目:

public class Project
{
    public int Id { get; set; }

    public DateTime CreatedDate { get; set; }
    public DateTime UpdatedDate { get; set; }

    public virtual ICollection<Document> Documents { get; set; }
}  

文件:

public class Document
{
    public int Id { get; set; }
    public string Name { get; set; }

    public DateTime CreatedDate { get; set; }
    public DateTime UpdatedDate { get; set; }

    public int ProjectId { get; set; }
    public virtual Project Project { get; set; }
}  

当我在控制台中运行add-migration xxxx时,它会显示以下迁移:

    public override void Up()
    {
        DropForeignKey("dbo.Documents", "ProjectId", "dbo.Projects");
        AddColumn("dbo.Documents", "Project_Id", c => c.Int());
        CreateIndex("dbo.Documents", "Project_Id");
        AddForeignKey("dbo.Documents", "Project_Id", "dbo.Projects", "Id");
        AddForeignKey("dbo.Documents", "ProjectId", "dbo.Projects", "Id");
    }  

数据库中已存在ProjectId列和ProjectId FK。

为什么要添加Project_Id列?我不想要那个专栏 我有其他课程/模特,他们工作。为什么这个人试图添加额外的列?

2 个答案:

答案 0 :(得分:1)

添加这个怎么样?

[ForeignKey("ProjectId")]
public virtual Project Project { get; set; }

这个?

[InverseProperty("Project")]
public virtual ICollection<Document> Documents { get; set; }

可能需要包含此内容才能使用注释。

using System.ComponentModel.DataAnnotations.Schema;

答案 1 :(得分:1)

您也可以使用流畅的api而不是数据注释来完成此操作。 Fluent api使您可以更好地控制数据注释。

创建一个名为ProjectMap的映射类,并在那里设置关系和属性。

public class ProjectMap : EntityTypeConfiguration<Project>
    {
        public ProjectMap()
        {
            this.Property(pr => pr.CreatedDate).IsRequired(); // If you wish to set a required field
            this.HasMany<Document>(pr => pr.Documents)
                .WithRequired(d => d.Project) // If Project is a required field in Document
                .HasForeignKey(d => d.ProjectId)
                .WillCascadeOnDelete(false); // To disable cascade delete
        }
    }

您可能想要包含

System.Data.Entity.ModelConfiguration
映射类中的

命名空间 使用此

modelBuilder.Configurations.Add(new ProjectMap());

将您的映射包含在上下文类中的OnModelCreating方法中。