2

「Plan」と「Material」の 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 に答える