首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过DataAnnotation强制使用外键列名称不起作用

通过DataAnnotation强制使用外键列名称不起作用
EN

Stack Overflow用户
提问于 2012-10-11 15:25:31
回答 2查看 3.6K关注 0票数 2

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

我的“Plan”类:

代码语言:javascript
运行
复制
[Column("MaterialId")]
public virtual Material Material { get; set; }

我的'Material‘类:

代码语言:javascript
运行
复制
public int MaterialId { get; set; }

但它似乎什么也做不了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-11 15:34:44

您应该使用以下命令:

计划类

代码语言:javascript
运行
复制
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 */

数学类

代码语言:javascript
运行
复制
public int MaterialId { get; set; }

已更新

完整解决方案

实体:

代码语言:javascript
运行
复制
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中的一些初始化:

代码语言:javascript
运行
复制
var context = new TestContext();
context.Database.CreateIfNotExists();

结果应该是这样的:

对于你们的名字:

代码语言:javascript
运行
复制
 [ForeignKey("MaterialFK")]
 public virtual Material MyMaterial { get; set; } //your name
 public int? MaterialFK { get; set; } //your name
票数 2
EN

Stack Overflow用户

发布于 2012-10-11 15:35:45

也许像这样的东西就能解决这个问题:

代码语言:javascript
运行
复制
[Column(Name="MaterialId")]
public virtual Material Material { get; set; }

否则,您可以通过使用类似以下内容覆盖DbContext的OnModelCreating方法来完成此操作:

代码语言:javascript
运行
复制
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");
       });
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12834293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档