2

好的,我有两个课程:“计划”和“材料”。一个计划有 0..1 个材料,一个材料可以包含在多个计划中。创建我的数据库时,自动生成的列被命名Material_MaterialId,我希望它被命名MaterialId

我的“计划”课程:

[Column("MaterialId")]
public virtual Material Material { get; set; }

我的“材料”课程:

public int MaterialId { get; set; }

但它似乎没有做任何事情。

4

2 回答 2

2

你应该使用这个:

计划班

public virtual Material Material { get; set; }

public int? MaterialId { get; set; } /* it prompt clr create foreign key MatherialId which referenced to MatherialId class of Matherial */

数学课

public int MaterialId { get; set; }

更新

完整的解决方案

实体:

namespace MvcApplicationTest.Models
{
    public class Material
    {
        public int MaterialId { get; set; }
        public int Name { get; set; }
    }

    public class Plan
    {
        public int PlanId { get; set; }
        public int Name { get; set; }

        //full navigation property
        public virtual Material Material { get; set; }
        public int? MaterialId { get; set; } 
        //

    }

    public class TestContext : DbContext
    {
        public DbSet<Material> Materials { get; set; }
        public DbSet<Plan> Plans { get; set; }
    }
}

global.asax 中的一些初始化:

var context = new TestContext();
context.Database.CreateIfNotExists();

结果应该是这样的:

在此处输入图像描述

对于你的名字:

 [ForeignKey("MaterialFK")]
 public virtual Material MyMaterial { get; set; } //your name
 public int? MaterialFK { get; set; } //your name
于 2012-10-11T07:34:43.850 回答
0

也许这样的事情可以解决问题:

[Column(Name="MaterialId")]
public virtual Material Material { get; set; }

否则,您可以通过OnModelCreating使用类似于以下内容的方法覆盖 DbContext 的方法来做到这一点:

public class YourContext: DbContext
{
  public DbSet<Plan> Plans { get; set; }
  public DbSet<Material> Materials { get; set; }

  public YourContext()
    : base("YourDb")
  {
  }

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Plan>().
      HasMany(c => c.Material).
      Map(
       m =>
       {
         m.MapLeftKey("MaterialId");
         m.MapRightKey("PlanId");
         m.ToTable("Plans");
       });
  }
}
于 2012-10-11T07:35:45.310 回答