好的,我有两个类:“计划”和“材料”。一个计划有0..1个物料,一个物料可以包含在多个计划中。创建数据库时,自动生成的列名为Material_MaterialId
,我希望将其命名为MaterialId
我的“Plan”类:
[Column("MaterialId")]
public virtual Material Material { get; set; }
我的'Material‘类:
public int MaterialId { get; set; }
但它似乎什么也做不了。
发布于 2012-10-11 15:34:44
您应该使用以下命令:
计划类
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-11 15:35:45
也许像这样的东西就能解决这个问题:
[Column(Name="MaterialId")]
public virtual Material Material { get; set; }
否则,您可以通过使用类似以下内容覆盖DbContext的OnModelCreating
方法来完成此操作:
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");
});
}
}
https://stackoverflow.com/questions/12834293
复制相似问题