首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改实体框架6中的默认连接表名称

更改实体框架6中的默认连接表名称
EN

Stack Overflow用户
提问于 2017-01-19 21:37:22
回答 1查看 183关注 0票数 3

我正在使用实体框架,并且我有一个使用连接表的多对多关系。

据我所知,它应该被生成,所以我的上下文看起来像这样:

代码语言:javascript
复制
public DbSet<Candidate> Candidates { get; set; }
public DbSet<SkillSet> SkillSets { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Candidate>().HasMany(t => t.SkillSets).WithMany(t => t.Candidates)
        .Map(m =>
        {
            m.ToTable("candidate_skillset");
            m.MapLeftKey("candidate_id");
            m.MapRightKey("skillset_id");
        });

        modelBuilder.Entity<SkillSet>().ToTable("skillset");
        modelBuilder.Entity<Candidate>().ToTable("candidate");
    }

候选模型:

代码语言:javascript
复制
namespace CandidateCatalog.Model
{
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

[Table("candidate")]
public class Candidate
{ 
    #region Simple propertied

    [Key]
    public int id { get; set; }

    [Column("firstname")]
    public string Firstname { get; set; }
    #endregion

    #region reference properties

    public int? commendation_id { get; set; }
    [ForeignKey("commendation_id")]
    public Commendation commendation { get; set; }

    public ICollection<SkillSet> SkillSets { get; set; }
    #endregion
}

}

技能集模型:

代码语言:javascript
复制
namespace CandidateCatalog.Model
{
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

[Table("skillset")]
public class SkillSet : SimpleDictionary
{
    public virtual ICollection<Candidate> Candidates { get; set; }
}
}

Entity Framework生成了一些默认的连接表名称,因此我假设我需要定义该名称。这就是问题所在,如何才能做到这一点?

编辑:

我已经添加了fluent api;

它可以查看属性:

代码语言:javascript
复制
 public ICollection<SkillSet> SkillSets { get; set; }

但是当我举个例子的时候:

代码语言:javascript
复制
   var ca = this._catalog.Candidates.FirstOrDefault(x => x.id == 125).SkillSets;

我得到了0,好像集合从来没有填满过一样,我仔细检查了一下DB关系是否存在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 21:56:17

您需要使用FluentAPI,如下所示:

型号:

代码语言:javascript
复制
public class Candidate
{
    [Key]
    public int CandidateId { get; set; }

    Column("firstname")]
    public string Firstname { get; set; }


    public virtual ICollection<SkillSet> SkillSets { get; set; }
}



public class SkillSet : SimpleDictionary
{
    [Key]
    public int SkillSetId { get; set; }

    public virtual ICollection<Candidate> Candidates { get; set; }
}

FluentAPI

代码语言:javascript
复制
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<SkillSet>()
                .HasMany<Candidate>(s => s.Candidates)
                .WithMany(c => c.SkillSets)
                .Map(cs =>
                {
                    cs.MapLeftKey("SkillSetId");
                    cs.MapRightKey("CandidateId");
                    cs.ToTable("candidate_skillset");
                });
    modelBuilder.Entity<SkillSet>().ToTable("skillset");
    modelBuilder.Entity<Candidate>().ToTable("candidate");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41743139

复制
相关文章

相似问题

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