您的位置:首页 > 数据库 > MySQL

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

2014-11-04 11:26 447 查看
有时候我们希望在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 以后可能会支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: