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

本文探讨如何在SQL数据库中使用复杂类型与Entity Framework进行集成,通过实例展示了如何定义和使用复杂类型来管理地址信息,并提供了关于复杂类型内部结构、命名规则、更新策略以及常见错误的详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们希望在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; }

 

转载于:https://www.cnblogs.com/keatkeat/p/4073210.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值