分割一个表到多个实体<EntityFramework6.0>

声明方式

 public class Photograph
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int PhotoId { get; set; }
        public string Title { get; set; }
        public byte[] ThumbnailBits { get; set; }
        [ForeignKey("PhotoId")]
        public virtual PhotographFullImage PhotographFullImage { get; set; }
    }

    public class PhotographFullImage
    {
        [Key]
        public int PhotoId { get; set; }
        public byte[] HighResolutionBits { get; set; }
        [ForeignKey("PhotoId")]
        public virtual Photograph Photograph { get; set; }
    }

    public class PhotoContext : DbContext
    {
        public DbSet<Photograph> Photographs { get; set; }
        public DbSet<PhotographFullImage> PhotographFullImages { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Photograph>()
                //配置必需关系。 数据库中的外键不可为 null否则无法保存到数据库。
                .HasRequired(p => p.PhotographFullImage)
                //作为关系目标的主体类型将成为依赖对象,且包含主体的外键
                .WithRequiredPrincipal(p => p.Photograph);
            modelBuilder.Entity<Photograph>().ToTable("Table1");
            modelBuilder.Entity<PhotographFullImage>().ToTable("Table2");
        }
    }

怎么使用

  static void Main(string[] args)
        {
            var thumbBits = new byte[100];
            var fullBits = new byte[2000];
            using (var context = new PhotoContext())
            {
                var photo = new Photograph
                {
                    Title = "小狗",
                    ThumbnailBits = thumbBits
                };
                var fullImage = new PhotographFullImage { HighResolutionBits = fullBits };
                photo.PhotographFullImage = fullImage;
                context.Photographs.Add(photo);
                context.SaveChanges();
            }
            using (var context = new PhotoContext())
            {
                foreach (var photo in context.Photographs)
                {
                    Console.WriteLine("照片: {0}, 压缩 {1} bytes",
                    photo.Title, photo.ThumbnailBits.Length);
                    // 显式地加载了“昂贵”的实体
                    context.Entry(photo).Reference(p => p.PhotographFullImage).Load();
                    Console.WriteLine("原始: {0} bytes",
                    photo.PhotographFullImage.HighResolutionBits.Length);
                }
                Console.ReadKey();
            }
         }

生成实体结构

运行效果

时间: 2024-08-27 21:47:25

分割一个表到多个实体<EntityFramework6.0>的相关文章

Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中

Sql Server 中将由逗号","分割的一个字符串,转换为一个表,并应用与 in 条件 select * from tablenmae where id in(1,2,3) 这样的语句和常用,但是如果in 后面的 1,2,3是变量怎么办呢,一般会用字符串连接的方式构造sql语句 string aa="1,2,3"; string sqltxt="select * from tablename where id in ("+aa+")

sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件

string aa="1,2,3"; string sqltxt="select * from tablename where id in ("+aa+")"; 可以把形如“1,2,3”这样的字符串转换为一个临时表,这个表有一列,3行,每一行存一个项目(用逗号分隔开的一部分) 该函数可以这样写: GO /****** Object: UserDefinedFunction [dbo].[StrToTable] Script Date: 2016/

(转)数据库表分割技术浅析(水平分割/垂直分割/库表散列)

数据库表分割技术包含以下内容:水平分割/垂直分割/库表散列.接下来将对以上分割进行详细介绍,感兴趣的朋友可以了解下,对你日后维护数据库是很有帮助的 一.水平分割 什么是水平分割?打个比较形象的比喻,在食堂吃饭的时候,只有一个窗口,排队打饭的队伍太长了,都排成S型了,这时容易让排队的人产生焦虑情绪,容易产生混乱,这时一个管理者站出来,增加多个打饭窗口,把那条长长的队伍拦腰截断成几队.更形象一点的理解,你拿一把“手术刀”,把一个大表猛的切了几刀,结果这个大表,变成了几个小表. 水平分割根据某些条件将

(转载)数据库表分割技术浅析(水平分割/垂直分割/库表散列)

一.数据库表分割技术 数据库表分割技术包含以下内容: 水平分割 垂直分割 库表散列 1.1.水平分割 什么是水平分割?打个比较形象的比喻,在食堂吃饭的时候,只有一个窗口,排队打饭的队伍太长了,都排成S型了,这时容易让排队的人产生焦虑情绪,容易产生混 乱,这时一个管理者站出来,增加多个打饭窗口,把那条长长的队伍拦腰截断成几队.更形象一点的理解,你拿一把“手术刀”,把一个大表猛的切了几刀,结果这个大表,变成了几个小表. 水平分割根据某些条件将数据放到两个或多个独立的表中.即按记录进分分割,不同的记录

SqlServer给一个表增加多个字段语法

添加字段语法 alter table table_name add column_name +字段类型+ 约束条件 给一个表增加多个字段: use NatureData go alter table XunHu add MaleCount varchar(50) null, FemaleCount varchar(50) null, SubadultCount varchar(50) null, LarvaeCount varchar(50) null, TraceType varchar(50

7.04 求一个表的行数

问题:计算一个表的行数,或计算某个列中值的个数.例如,找到职员总数以及每个部门的职员数.解决方案:如果以整个表作为一个组或一个窗口计算行数,则只需使用COUNT函数及"*"字符:select count(*) from emp; 如果要创建多个数据组或窗口,则使用COUNT函数的同时,还要使用GROUP BY子句:select deptno,count(*) from emp group by deptno;

(转)DataTable添加行出现“该行已经属于另一个表”的错误!

1 DataTable dt1 = new DataTable(); 2 3 DataTable dt2 = new DataTable(); 4 5 //为dt1创建结构 6 7 DataColumn pName = new DataColumn("名称"); 8 pName.DataType = System.Type.GetType("System.String"); 9 DataColumn pCount = new DataColumn("数量&

移动表到另外一个表空间

把一个表从一个表空间移动到另外一个表空间有两种方式 一,使用"alter table X move tablespace Y" and "alter index X rebuild tablespace Y" 优点:简单,快速 缺点:不能移动含有LONG or LONG RAW字段的表 ALTER TABLE MOVE TABLESPACE METHOD: =================================== We will start with

sql server数据库的表中修改一个表的字段的数据类型后,不能保存

一个表中的一个字段 student(sno, sname, age) sname 类型 nchar(10) 修改成int 保存时报错. 这个是SQL SERVER自身默认设置的问题,它默认为不能修改类型. 只需要在"tool->option->Designer ->Table and Database designers 中 去掉prvent saving changes that require table re-created."就可以了, 欧克了,在保存刷新.