首页 > 其他分享 >外键关系不为主键Id时的设计

外键关系不为主键Id时的设计

时间:2023-07-23 15:11:13浏览次数:32  
标签:LibraryEntity set get 外键 public BookEntity 设计 Id

当外键关系设计不为主键Id时(一般不这样设计)

LibraryEntity

using Volo.Abp.Domain.Entities;

namespace Product.Domain.Entity;

public class LibraryEntity : AggregateRoot<Guid>
{
    public string Name { get; set; }
    public string Location { get; set; }

    /// <summary>
    /// 外键 在Creating显示对应BookEntity的CeShiId
    /// </summary>
    public int TestId { get; set; }
    
    public List<BookEntity> Books { get; set; }

    public LibraryEntity()
    {
        Books = new List<BookEntity>();
    }
}

BookEntity

using Volo.Abp.Domain.Entities;

namespace Product.Domain.Entity;

public class BookEntity : Entity<Guid>
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string PublishYear { get; set; }

    /// <summary>
    /// 外键 在Creating显示对应LibrayEntity的TestId
    /// </summary>
    public int CeShiId { get; set; }
    public LibraryEntity Library { get; set; }
}

这里的LibraryEntity.TestId就是外键Id,对应BookEntity.CeShiId。它需要设计成唯一值
OnModelCreating显示指定他们之间的关系

        builder.Entity<LibraryEntity>(p =>
        {
            p.ToTable("Libraries");
            p.ConfigureByConvention();

            // 指定主键Id
            p.HasKey(x => x.Id);

            // 忽略暂时用不上的字段
            p.Ignore(x => x.ConcurrencyStamp);
            p.Ignore(x => x.ExtraProperties);

            // 配置 LibraryEntity 和 BookEntity 之间的关系
            p.HasMany(l => l.Books) // 一个 LibraryEntity 关联多个 BookEntity
                .WithOne(b => b.Library) // 一个 BookEntity 关联一个 LibraryEntity
                .HasPrincipalKey(b => b.TestId);
        });


        builder.Entity<BookEntity>(p =>
        {
            p.ToTable("Books");
            p.ConfigureByConvention();

            // 指定主键Id
            p.HasKey(x => x.Id);

            // 配置 BookEntity 和 LibraryEntity 之间的关系
            p.HasOne(b => b.Library) // 一个 BookEntity 关联一个 LibraryEntity
                .WithMany(l => l.Books) // 一个 LibraryEntity 关联多个 BookEntity
                .HasForeignKey(b => b.CeShiId); // 使用 CeShiId 作为外键
        });

这是EF的关系发现约定设计,微软常见的四种设计
<navigation property name><principal key property name>
<navigation property name>Id
<principal entity type name><principal key property name>
<principal entity type name>Id

具体参考微软文档

标签:LibraryEntity,set,get,外键,public,BookEntity,设计,Id
From: https://www.cnblogs.com/kele-cc/p/17575032.html

相关文章

  • YetAnotherGridTask
    [ABC311F]YetAnotherGridTask考虑找规律。我们先将必定要填黑的格子填完。对于以下的矩形....#........#................处理后....#.....##.#..##.##.##.#####一个必要的观察是:对于从右上角到左下角的次对角线,对角线上必定存在一个分界点,使得其左边全为白,......
  • IDE暗黑主题推荐-Dracula
    作为程序员,我们一天中会花费大量时间在编码和阅读代码上。优秀的代码编辑器主题可以减轻眼睛的疲劳,提高工作效率。本文向大家推荐一款非常流行的JetBrainsIDE主题插件-Dracula。它提供了深色调、高对比度的主题风格,是黑暗系编程主题的杰出代表。Dracula的缘起Dracula主......
  • 基于Java Web的物流快递管理系统的设计与实现-计算机毕业设计源码+LW文档
    选题的背景、意义及研究现状:研究背景随着中国物流业的高速发展,物流管理的重要性不言而喻。而物流管理的效率更是各个物流企业最看重的地方。近些年来,很多公司和企业都实现了自动化办公及信息管理,工作人员只需要在电脑前动动手指,就可完成繁琐的管理操作,极大程度上减轻了工作人员的......
  • 学习设计模式,修炼内功。
    常用设计模式之.Net示例代码合集 每一次初学者粉丝朋友,在后台向我咨询编程问题,我除了给他们指导学习路线,我都会建议他们学完基础知识后,一定要要注重编程规范,学习设计模式,修炼内功。虽然说很多程序员,他们日常主要工作是CRUD,但是学习设计模式也是有助于学习公司的框架,另外设计......
  • IntelliJ IDEA配置GitHub上传项目
    保证本地已安装\(Git\)一、配置GitHub账号新建项目,\(File\rightarrowSettings\rightarrowVersion\Control\rightarrowGitHub\)添加\(GitHub\)账号二、配置公钥打开\(GitBash\)输入命令ssh-keygen-t-rsa-C"PersonalEmail",将根据指示到对应的路径(一般是C:\Us......
  • 嵌入式系统设计师考试攻略分享
    liwen012023.07.20前言7月20日开始,可以查询2023年的嵌入式系统设计师的考试成绩了,该考试有上午和下午共两科,每科满分75分,两科同时达到45分为及格通过。我的成绩是上午45分,下午61分,刚好压线通过,这里分享一下我的考试和备考经验,以供参考。(一)这是个什么考试?全国计算机技术与......
  • idea打包springboot项目,打包成war包,如何不把lib目录或指定jar打进去?
    1、在pom.xml文件中添加如下配置:<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration>......
  • 分布式ID
    背景分库分表中,ID容易重复。解决办法UUID统一ID序列表雪花算法UUID通用唯一识别码UniversallyUniqueIdentifier实际应用中使用少,缺点是单纯ID、没有实际意义、32位。是可以解决ID重复的问题。MyCat不支持UUID方式。Sharding-Jdbc支持。  统一ID序列表从一个......
  • Android Studio 的build窗口 build ouput 显示乱码的解决办法
     help窗口 点击 edit 然后在下面添加  -Dfile.encoding=UTF-8 重启android studio即可......
  • 滴滴太狠:分布式ID,如何达到1000Wqps?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......