Fox LIFE 2022-09-21 18:59 采纳率: 80%
浏览 11
已结题

EF Core 3.x 的关系模型怎么写?

EF Core 3.x 的关系模型怎么写?

前置信息

还在学EF Core,看到微软官网文档有写,就想尝试写一写,但我的会报错。

微软文档\EF Core\创建模型\关系

https://learn.microsoft.com/zh-cn/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key

项目环境版本信息备注
NET 6.x
EF Core3.xrunning
EF6项目也同时具有这个,但非running状态

下面是我写的模型

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace ApiDB.Model
{
    public class Blogs
    {
        [Key, Column("bId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]//文章Id
        public int bId { set; get; }

        [Column(name: "bTitle",TypeName ="varchar(25)")]//文章名
        public string? bTitle { set; get; }

        [Column(name: "bText"), Required]//内容
        public string? bDescription { set; get; }


        [Column("bCreated")]//创建时间
        public DateTime created
        {
            set
            {
                created = DateTime.Now;
            }

            get
            {
                return this.created;
            }
        }

        [Column("bRead")]//阅读量
        public int read { set; get; }

        public Parts Parts { get; set; }    //引用导航

        [Column("name")]
        public int uuName { set; get; } //作者Id
    }
}
// 博文模型 ---关联--> 角色模型
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace ApiDB.Model
{
    // 角色模型
    [Table("Parts")]
    public class Parts
    {
        [Key,Column("uuId")]
        public int Id { set; get; }

        [Column("uuName"), MaxLength(255)]
        public string? Name { set; get; }

        [Column("uuStatus"), Precision(3)]
        public int Status { set; get; }

        [Column("uuPass"), MaxLength(255)]
        public string? Pass { set; get; }

        public List<Blogs> Blog { set; get; }//导航
    }
}

运行报错

img

生成SQL语句:

SELECT `b`.`bId`, `b`.`PartsId`, `b`.`bText`, `b`.`bTitle`, `b`.`bCreated`, `b`.`bRead`, `b`.`name` FROM `Blog` AS `b` 

其中关于 b.PartsId这个字段我不明白为什么会存在,是因为映射导航的原因吗?所以生成了一个未知的字段?
根据上面Parts模型可以知道我的数据库对应表使用的是uuId这个字段。所以这个字段应该怎么修改才能正常关联起来呢?

对于我的Blog表的name字段,它是一个外键,所以我希望能通过数据注释的形式标写出来


预期结果

能实现关系型模型关联,或者正常读取Blog模型

  • 写回答

2条回答 默认 最新

  • Fox LIFE 2022-09-21 19:23
    关注

    现在我尝试修改了Blog模型,为public Parts Parts { get; set; } //引用导航添加了数据注释[ForeignKey("Name")],并将uuName字段修改为Name了。
    这时候生成 SQL为:

     SELECT `b`.`bId`, `b`.`name`, `b`.`bText`, `b`.`bTitle`, `b`.`bCreated`, `b`.`bRead`  FROM `Blog` AS `b`
    

    终端报错为:
    An exception occurred while iterating over the results of a query for context type 'ApiDB.Comon.WebContext'. System.FormatException: Input string was not in a correct format.


    这个又是什么问题?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 创建了问题 9月21日

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能