Entity Framework 小知识(五)

简介: Entity Framework 小知识(五)

在 多对多关系映射 中关联表是EF自动生成的。但有时候我们需要显示定义关联表。我们可以按照如下步骤定义(继续使用多对多关系映射这篇文章饿代码):

1. 定义关联表类:

public class StudentCourses : BaseEntity
{
    public int StudentId { get; set; }
    public virtual Student Student { get; set; }
    public int CourseId { get; set; }
    public virtual Course Course { get; set; }
}

2. 修改 StudentCourses 类中的导航属性:

public class Student:BaseEntity
{
    public string Name { get; set; }
    public int Age { get; set; }
    public virtual ICollection<StudentCourses> StudentCourses { get; set; }
}
public class Course : BaseEntity
{
    public string Name { get; set; }
    public string TeacherName { get; set; }
    public virtual ICollection<StudentCourses> StudentCourses { get; set; }
}

3. 修改 StudentMap CoursesMap 映射:

public class StudentsMap : EntityTypeConfiguration<Student>
{
    public StudentsMap()
    {
        //表名称
        ToTable("Students");
        //主键
        HasKey(p => p.Id);
        //设置主键自增长
        Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        //设置要映射的数据
        Property(p => p.Name).HasColumnType("VARCHAR").HasMaxLength(50);
        Property(p => p.Age);
        Property(p => p.CreateDateTime);
        //设置关系
        HasMany(p => p.StudentCourses)
            .WithRequired(p => p.Student)
            .HasForeignKey(p => p.StudentId);
    }
}
public class CourseMap : EntityTypeConfiguration<Course>
{
    public CourseMap()
    {
        ToTable("Coureses");
        HasKey(p => p.Id);
        Property(p => p.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(p => p.Name).HasColumnType("VARCHAR").HasMaxLength(50);
        Property(p => p.TeacherName);
        Property(p => p.CreateDateTime);
        HasMany(p => p.StudentCourses)
            .WithRequired(p => p.Course)
            .HasForeignKey(p => p.CourseId);
    }
}

运行代码,查看数据库发现生成了同样的数据库,多对多关系也正确的反映出来。

目录
相关文章
|
网络协议 C语言
C语言 网络编程(十)TCP通信创建流程---客户端
在TCP通信中,客户端需通过一系列步骤与服务器建立连接并进行数据传输。首先使用 `socket()` 函数创建一个流式套接字,然后通过 `connect()` 函数连接服务器。连接成功后,可以使用 `send()` 和 `recv()` 函数进行数据发送和接收。最后展示了一个完整的客户端示例代码,实现了与服务器的通信过程。
|
前端开发 图形学
Unity精华☀️UI和物体可见性的判断方法
Unity精华☀️UI和物体可见性的判断方法
Appium文本定位方法实现find_element_by_text
Appium文本定位方法实现find_element_by_text
172 0
|
缓存 开发工具 git
GitHub标星36k+的超火高质量Git中文教程,源码、实战一把抓
高质量的 Git 中文教程,源于国外社区的优秀文章和个人实践
|
图形学
unity中结构体的使用-01
结构体(Struct)是值类型数据结构,在栈上分配内存,可以包含字段,属性,方法,构造函数。结构体可以实现接口,但是不能继承。在Dots里有大量依靠Struct实现接口来定义Entities数据类型和实现逻辑。
|
缓存 边缘计算 网络协议
CDN永远的神!成功解决了困惑我多年的GitHub访问太慢问题
我写技术文章画的图片是保存到 GitHub 的,没别的原因,就是因为免费,但是GitHub 访问的速度大家都懂的,访问的速度很慢。 所以我会用 CDN 来加速图片的访问,也就是我的图床的方案是 GitHub + jsdelivr CDN,使用很简单,只需要把域名地址替换一下就行。
|
JSON JavaScript 安全
使用 React+ethers.js 开发简单加密钱包(一)
使用 React+ethers.js 开发简单加密钱包
663 0
|
机器学习/深度学习 算法 Java
扩展欧几里得求乘法逆元 - 手算(结尾附视频)
扩展欧几里得求乘法逆元 - 手算(结尾附视频)
604 0
|
负载均衡 Kubernetes 监控
[Istio是什么?] 还不知道你就out了,40分钟快速理解(上)
[Istio是什么?] 还不知道你就out了,40分钟快速理解
334 0