ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EF Core中通过Fluent API配置一对一关系

2022-04-06 14:01:18  阅读:152  来源: 互联网

标签:Core set Exam get EF Fluent Person modelBuilder public


继续配置实体之间的第三种关系,即一对一的关系。

以考研报名为例,一个人有唯一的身份证号,在首次报名时会生成一个唯一的考试号,这样身份证号和考试号就是一对一的关系。

同样提供ER图如下:

Person类:

public class Person
{
    public string PersonIdentityNum { get; set; }

    public string PersonName { get; set; }

    public virtual Exam Exam { get; set; }
}

Exam类:

public class Exam
{
    public string ExamNo { get; set; }

    public decimal ExamScore1 { get; set; }

    public decimal ExamScore2 { get; set; }

    public decimal ExamScore3 { get; set; }

    public decimal ExamScore4 { get; set; }

    public string PersonIdentityNum { get; set; }

    public virtual Person Person { get; set; }
}

然后在数据库上下文中配置一对一的关系:

public class MyDbContext : DbContext
{
    public MyDbContext()
    {

    }

    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        //指定主键
        modelBuilder.Entity<Person>().ToTable("Person").HasKey(o => o.PersonIdentityNum);
        modelBuilder.Entity<Exam>().ToTable("Exam").HasKey(o => o.ExamNo);

        //一个人对应一个考生
        modelBuilder.Entity<Person>()
            .HasOne(o => o.Exam)
            .WithOne(o => o.Person).HasForeignKey<Exam>(o => o.PersonIdentityNum);
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);
        optionsBuilder.UseSqlServer("server=xxx.xxx.xxx.xxx;database=数据库名;uid=数据库账号;pwd=数据库账号密码;");
    }

    public DbSet<Person> Person { get; set; }

    public DbSet<Exam> Exam { get; set; }

}

最后就可以直接关联查询:

using (var db = new ChipContext())
{
    //查询姓名为张三的考试信息
    Exam exam = db.Person.Include(o => o.Exam).FirstOrDefault(o => o.PersonName.Equals("张三")).Exam;
    
}

 

标签:Core,set,Exam,get,EF,Fluent,Person,modelBuilder,public
来源: https://www.cnblogs.com/guwei4037/p/16106034.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有