zoukankan      html  css  js  c++  java
  • Entity Framework学习五:一个实体类映射到多个表

    对于一些不经常用并且读取比较耗时和耗资源到的字段,我们经常是放到不同的数据表中。例如我们前面讲到的Person类,如果在里面定义用户的图像,则读取图像会比较耗时,我们把用户图像数据拆分到另外一张表中。首先我们看实体类的定义:

    public class Person
        {
            public Person()
            {
                Phones = new HashSet<Phone>();
                Address = new Address();//必须初始化
            }
            public Address Address { get; set; }//必须为集合属性
    
            public int PersonId { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
    
            public string MiddleName { get; set; }
           
    public byte[] Photo { get; set
    ; }
    
            public virtual ICollection<Phone> Phones { get; set; }
    
            public PersonState PersonState { get; set; }
    
        }
    public class PersonMap : EntityTypeConfiguration<Person>
        {
            public PersonMap()
            {
                Map(p 
    =>
    
                {
                    p.Properties(ph 
    => new
    
                    {
                        ph.Address,
                        ph.FirstName,
                        ph.LastName,
                        ph.MiddleName,
                        ph.PersonState
                        
    //ph.Phones }); p.ToTable("People"
    );
                });
                Map(p 
    =>
    
                {
                    p.Properties(ph 
    => new
    
                    {
                        ph.Photo
                    });
                    p.ToTable(
    "PersonBlob"
    );
                });
               
                
                Property(p => p.FirstName)
                    .HasMaxLength(30);
                Property(p => p.LastName)
                    .HasMaxLength(30);
                Property(p => p.MiddleName)
                    .HasMaxLength(1)
                    .IsUnicode(false)
                    .IsFixedLength();
    
                this.HasMany(p => p.Phones)
                    .WithRequired()
                    .HasForeignKey(ph => ph.PersonId)
                    .WillCascadeOnDelete(false);
            }
        }

    注意上面标记的Map()代码段落,一定要记住住表映射在前,关联表映射在后,否则对表查询时没问题,但是做增加,修改时会报错。映射只需要映射到所有的属性就可以了,像上面的Phones不用映射。

  • 相关阅读:
    win8 win10 安装msi 提示2502、2503的错误代码
    本地wamp的Internal Server Error错误解决方法
    安卓客户端测试总结
    测试bug级别定义
    测试流程
    测试人员的分工
    web安全测试-AppScan使用分享
    性能测试-小计
    0基础学java_字节流和字符流
    0基础学java_通配符
  • 原文地址:https://www.cnblogs.com/zjmsky/p/4896120.html
Copyright © 2011-2022 走看看