• EF4.1之复杂类型


    首先我们生成两张对应表:

        public class Client
        {
            public int ClientID { set; get; }
            public string ClientName { set; get; }
    
            //此时 这个 Address 并不想要在数据库里面 生成对应的 数据表, 比如我们要丰富 业务逻辑,想要设置必填项,
            //想要 把这个 复杂的属性  映射到 表中的字段
            //要想要 生成到 Client 对应的 字段 使用 标注就不能实现了,,所以这时 要在 构建器里面进行设置
            public Address ResidentialAddress { set; get; }
            public Address DeliveryAddress { set; get; }
        }
    
        public class Address
        {
            public int StreetNumber { set; get; }
            public string StreetName { set; get; }
        }

    我定义了两个类,但是我并不想生成两张表,而是下面那样的生成一张表:

    我们可以看出,我们这样做而没有是将所有的属性都定义到一张表里面,这样是可以丰富我们的模型。但是这个时候想要通过标注来限制我的模型是不行的,设个时候就要用到模型构建器了。

     1             modelBuilder.Entity<Client>().Property(c => c.ClientID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
     2             modelBuilder.Entity<Client>().Property(c => c.ClientName).IsRequired().HasMaxLength(32);
     3 
     4             //下面是重点 首先,将 Address设置为 复杂属性  然后 将 Address 里面的属性对应  生成到 Client 数据表的字段
     5             modelBuilder.ComplexType<Address>();//将 类 Address 设置成 复杂属性
     6             //这个复杂属性 也可以  用标注的 方式 加在类的 上面[ComplexType],,但是下面的生成 到数据库表的 字段
     7 
     8 
     9 
    10             modelBuilder.Entity<Client>().Property(c => c.ResidentialAddress.StreetName).HasColumnName("ResAddressStreetName").IsRequired().HasMaxLength(325);
    11             modelBuilder.Entity<Client>().Property(c => c.ResidentialAddress.StreetNumber).HasColumnName("ResAddressStreetNum").IsRequired();
    12             modelBuilder.Entity<Client>().Property(c => c.DeliveryAddress.StreetName).HasColumnName("DelAddressStreetName").IsRequired().HasMaxLength(325);
    13             modelBuilder.Entity<Client>().Property(c => c.DeliveryAddress.StreetNumber).HasColumnName("DelAddressStreetNum").IsRequired();

    但是使用复杂模型一定要注意一点:

    就是复杂类型就是为null ,就不行不对其进行赋值,就是赋值一个所有属性都为null的对象也是要进行赋值的。同样的道理:EF获得实体模型的时候即使是获得实体的所有的属性都为null,也是会返回一个实体。

  • 相关阅读:
    Java开发之富文本编辑器TinyMCE
    将博客搬至CSDN
    利用Docker搭建java项目开发环境
    Linux上传和下载之Xshell
    JSP中利用JSTL标签对日期格式化
    MySQL数据库localhost的root用户登陆遭遇失败
    CentOS7下 简单安装和配置Elasticsearch Kibana Filebeat 快速搭建集群日志收集平台(版本6.x)
    CentOS下递归遍历文件夹下所有文件,查找指定字符
    谷歌浏览器插件不让离线安装怎么办?
    X-Forwarded-For 会少记录一次代理服务器的IP
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3422084.html
Copyright © 2020-2023  润新知