zoukankan      html  css  js  c++  java
  • 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,也是会返回一个实体。

  • 相关阅读:
    XmlReader和XElement组合之读取大型xml文档
    requestAnimationFrame/cancelAnimationFrame——性能更好的js动画实现方式
    webview的简单介绍和手写一个H5套壳的webview
    关于前后端写入Cookie时domain的一个问题
    vscode调试webpack的启动和打包部署过程,nodejs调试
    java 实现仿照微信抢红包算法,实测结果基本和微信吻合,附demo
    Java中的BigDecimal类和int和Integer总结
    @RequestParam和@RequestBody和@PathVariable用法小结
    spring-boot+spring-cloud+maven-module 一个 maven多模块的微服务架构模版
    SpringBoot + SpringCloud的爬坑之旅
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3422084.html
Copyright © 2011-2022 走看看