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,也是会返回一个实体。

  • 相关阅读:
    正则表达式30分钟入门教程
    Python的神奇方法指南
    Python 2.7教程
    javaweb开发.常用的第三方包
    javaweb开发.页面中文乱码问题
    javaweb开发.eclipse使用小常识
    javaweb开发3.基于Servlet+JSP+JavaBean开发模式的用户登录注册
    ionic3使用第三方图标
    json-server使用及路由配置
    javaweb开发2.新建一个javaweb项目
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3422084.html
Copyright © 2011-2022 走看看