• Entity Framework with MySQL 学习笔记一(复杂类型 Complex Types)


    有时候我们希望在sql一个表里面的column, 一部分被分化成另一个class 

    典型的例子是 Address 

    直接看代码:

        [Table("member")]
        public class Member
        {
            [Key]
            public Int32 memberId { get; set; }
            public string name { get; set; }       
            public virtual Address address { get; set; }
        }
        /*
            不能公开 - public DbSet<Address> addresss { get; set; } <-don't do this
        */
        [ComplexType] //写一个标签
        public class Address
        {     
            /*
                这里一定要写 column 即使名字一样,因为defaul的命名法是 Address_postcode 
            */
            [Column("postcode")] 
            public string postcode { get; set; }
            [Column("country")]
            public string country { get; set; }
        }

    insert 

        db.members.Add(new Member
        {
            name = "lu xiao feng",
            address = new Address
            {
                country = "MALAYSIA",
                postcode = "81300"
            }
        });
        db.SaveChanges();

    注 : 复杂类型内不要放 FK concurrentCheck 那些比较好(我没研究,但是常遇到bug) 

    更新 :

    默认情况下,我们不使用[Column("xx")]也是可以的,EF 会替我们命名,规范是 属性名 + "_" + 属性名 + "_" + .... 都是用属性名,配合下划线,多少层都可以。

    当某个entity有超过1个同类的 ComplexType 时,上面的 [Column("xx")] 就搞不定了

    这时我们可以用 : 

    var nat = modelBuilder.Types<Nat>();
    nat.Configure(n => n.Property(p => p.ta1.token).HasColumnName("ta1_token"));
    nat.Configure(n => n.Property(p => p.ta2.token).HasColumnName("ta2_token"));

     complex 不可以是null , 你至少也要它一个空的对象。不然会 saveChange error的, EF 以后可能会支持。

    更新 : 2016-09-03

    突发奇想,以为可以这样设定名字(本来是 address_text, 我希望变成 adminAddress_text), 很可惜不可以这样 /. 

    [Column("adminAddress")]
    public Address address { get; set; }
  • 相关阅读:
    Redis12:客户端
    Redis11:事件
    Redis10:RDB持久化与AOF持久化
    Redis09:过期时间与删除策略、redis中的特殊线程
    Redis08:redis中的对象与存储形式
    Redis07:底层:基数树radix tree
    Redis06:底层:跳跃链表skiplist
    C++基础知识:异常处理
    C++基础知识:STL简介
    C++基础知识:泛型编程
  • 原文地址:https://www.cnblogs.com/keatkeat/p/4073210.html
Copyright © 2020-2023  润新知