使用EFCore 自动生成两个表外键的方法

该博客介绍了如何在EFCore中不配置外键的情况下创建两个表,然后通过代码手动建立一对一的关系,并将外键添加到Model1中。之后,通过数据迁移将外键添加到数据库模型,确保数据的一致性。博客还展示了项目的NuGet包引用和配置文件内容。

在这里插入图片描述
在这里插入图片描述

建2个表, 导入到数据库中

在EFCore中配置 先不配置外键

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SelectDemon
{
   
   
    public class Model1
    {
   
   
        public int Id {
   
    get; set; }
        public string Name {
   
    get; set; }
        public int Number {
   
    get; set; }
        //public Model2 Model2 { get; set; } //没有对应外键时候注释掉
        public int Model2Id {
   
    get; set; }

    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SelectDemon
{
   
   
    public  class Model2
    {
   
   
        public int Id {
   
    get; set; }
        public string OtherInfo {
   
    get; set; }
        public int Number {
   
    get; set; }
        //public List<Model1> Model1s { get; set; } //没有对应外键时候注释掉

    }
}

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SelectDemon
{
   
   
    //多
    public class Model1Config : IEntityTypeConfiguration<Model1>
    {
   
   
        public void Configure(EntityTypeBuilder<Model1> builder)
        {
   
   
            builder.ToTable("Model1");
            builder.HasKey(x => x.Id);
            //一对一
            //builder.HasOne<Model2>(m=>m.Model2).WithOne(a=>a.Mo
### 关于 .NET EF Core 使用及相关问题 EF Core 是微软开发的一个轻量级、可扩展的对象关系映射器(ORM),用于访问和管理持久化数据[^1]。当涉及到约束时,EF Core 提供了多种方式来定义这些关联。 #### 定义属性 在配置方面,可以通过实体类中的导航属性以及对应的字段来进行设置: ```csharp public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Post>() .HasOne(p => p.Blog) .WithMany(b => b.Posts) .HasForeignKey(p => p.BlogId); // 显式指定名称 } } ``` 上述代码片段展示了如何通过 `OnModelCreating` 方法显式地为 `Post` 实体指定了指向 `Blog` 的名为 `BlogId`。 #### 数据库迁移与更新 每当修改模型结构之后,都需要创建新的迁移并应用到数据库上以同步更改。这可以借助命令行工具完成: ```bash Add-Database ``` 这两条命令分别用来生成一个新的迁移文件,并将其应用于当前连接的目标数据库中。 #### 常见问题及解决方案 有时可能会遇到一些常见错误,比如删除父记录失败因为存在子依赖项等问题。对于这种情况,在设计阶段就应该考虑好级联操作策略;另也可以利用 Fluent API 来调整默认行为: ```csharp modelBuilder.Entity<Post>() .HasOne(p => p.Blog) .WithMany(b => b.Posts) .OnDelete(DeleteBehavior.Cascade); ``` 这里设置了当博客被移除时其下所有的文章也会一同被清除掉。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值