Entity Framework表拆分为多个实体

 更新时间:2022年03月05日 09:44:04   作者:.NET开发菜鸟  
这篇文章介绍了Entity Framework表拆分为多个实体的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

概念

表拆分:一个表拆分成多个实体,例如Photograph表,可以拆分为Photograph和PhotographFullImage两张表。

1、Photograph实体结构:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeFirstTableSplit.Model
{
    /// <summary>
    /// 缩略图类
    /// </summary>
    public class Photograph
    {
        /// <summary>
        /// 设置PhotoId是主键 自动增长
        /// </summary>
        [Key]
        [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
        public int PhotoId { get; set; }

        public string Title { get; set; }

        /// <summary>
        /// 缩略图
        /// </summary>
        public byte[] ThumbnailBite { get; set; }

        /// <summary>
        /// Photograph通过导航属性引用PhotographFullImage
        /// </summary>
        [ForeignKey("PhotoId")]
        public virtual PhotographFullImage PhotographFullImage { get; set; }
    }
}

 2、PhotographFullImage实体结构:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeFirstTableSplit.Model
{
    public class PhotographFullImage
    {
        [Key]
        public int PhotoId { get; set; }

        /// <summary>
        /// 高分辨率
        /// </summary>
        public byte[] HighResolutionBits { get; set; }

        /// <summary>
        /// PhotographFullImage通过导航属性引用Photograph
        /// </summary>
        [ForeignKey("PhotoId")]
        public virtual Photograph Photograph { get; set; }
    }
}

 3、创建数据上下文对象子类:

using CodeFirstTableSplit.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeFirstTableSplit.DatabaseContext
{
    public class EFDbContext :DbContext
    {
        public EFDbContext()
            : base("name=Default")
        { }

        public DbSet<Photograph> Photographs { get; set; }

        public DbSet<PhotographFullImage> PhotographFullImages { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // 设置主体
            modelBuilder.Entity<Photograph>().HasRequired(p => p.PhotographFullImage).WithRequiredPrincipal(t => t.Photograph);

            // 生成同一张表:设置两个实体有相同的表名
            modelBuilder.Entity<Photograph>().ToTable("Photograph");
            modelBuilder.Entity<PhotographFullImage>().ToTable("Photograph");
            base.OnModelCreating(modelBuilder);
        }


    }
}

 4、使用数据迁移生成数据库结构,查看生成后的结构:

5、写入数据

using CodeFirstTableSplit.DatabaseContext;
using CodeFirstTableSplit.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeFirstTableSplit
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new EFDbContext())
            {
                // 写入数据
                byte[] thumbBits = new byte[100];
                byte[] fullBits = new byte[2000];
                var photo = new Photograph() { Title = "李四", ThumbnailBite = thumbBits };
                var fullImage = new PhotographFullImage() { HighResolutionBits = fullBits };

                photo.PhotographFullImage = fullImage;
                context.Photographs.Add(photo);
                // 保存
                context.SaveChanges();
            }
            Console.WriteLine("创建成功");
            Console.ReadKey();
        }
    }
}

 6、查询数据

到此这篇关于Entity Framework表拆分为多个实体的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • .Net Core和RabbitMQ限制循环消费的方法

    .Net Core和RabbitMQ限制循环消费的方法

    当消费者端接收消息处理业务时,如果出现异常或是拒收消息将消息又变更为等待投递再次推送给消费者,这样一来,则形成循环的条件,这篇文章主要介绍了.Net Core和RabbitMQ限制循环消费的方法,需要的朋友可以参考下
    2022-10-10
  • ASP.NET堆和栈三之引用类型对象拷贝和内存分配

    ASP.NET堆和栈三之引用类型对象拷贝和内存分配

    这篇文章介绍了ASP.NET堆和栈中引用类型对象的拷贝和内存分配,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • .NET Core读取配置文件方式详细总结

    .NET Core读取配置文件方式详细总结

    这篇文章主要为大家详细总结了.NET Core读取配置文件方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 使用Supervisor守护ASP.NET Core应用程序进程

    使用Supervisor守护ASP.NET Core应用程序进程

    这篇文章介绍了使用Supervisor守护ASP.NET Core应用程序进程的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • .Net使用分表分库框架ShardingCore实现多字段分片

    .Net使用分表分库框架ShardingCore实现多字段分片

    本文详细讲解了.Net使用分表分库框架ShardingCore实现多字段分片的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • asp.net 站点URLRewrite使用小记

    asp.net 站点URLRewrite使用小记

    asp.net的底层运作已经也乱谈过一番, 今天记一下URLRewrite的方法。
    2009-11-11
  • DataSet.Tables[].Rows[][]的用法详细解析

    DataSet.Tables[].Rows[][]的用法详细解析

    以下是对DataSet.Tables[].Rows[][]的用法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • 精通ASP.NET中弹出技术

    精通ASP.NET中弹出技术

    本文讨论如何以ASP.NET中的CodeBehind方式实现各种弹出窗口,实现与弹出窗口的交互
    2012-10-10
  • 在 .NET 项目中复制资源文件夹到生成目录的方法

    在 .NET 项目中复制资源文件夹到生成目录的方法

    本文主要介绍在使用 Visual Studio 进行调试和发布时,如何在 .NET 项目中复制资源文件夹到生成目录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • 在ASP.NET Core Mvc集成MarkDown的方法

    在ASP.NET Core Mvc集成MarkDown的方法

    这篇文章主要介绍了在ASP.NET Core Mvc集成MarkDown的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论