我在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
列?我不想要那个专栏
我有其他课程/模特,他们工作。为什么这个人试图添加额外的列?
答案 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方法中。