Entity Framework Code First Complex Type

Complex Type是用來重覆使用的欄位,有幾個規定
1. 不能有主索引
2. 一個類別中只能有一個實體
3. 只能是引用屬性,不能是集合屬性

Table1

namespace ConsoleApplication1.Models
{
public class Table1
{
public int Table1Id { get; set; }
public Address Address { get; set; }
}
}

Table2
namespace ConsoleApplication1.Models
{
public class Table2
{
public int Table2Id { get; set; }
public Address Address { get; set; }
}
}

Address
namespace ConsoleApplication1.Models
{
public class Address
{
public string Addr1 { get; set; }

public string Addr2 { get; set; }
}
}

預設狀態資料表的樣子

加上DataAnnotation
namespace ConsoleApplication1.Models
{
using System.ComponentModel.DataAnnotations.Schema;

[ComplexType]
public class Address
{
[Column(“Addr1”)]
public string Addr1 { get; set; }

[Column(“Addr2”)]

public string Addr2 { get; set; }
}
}

Fluent API設定
namespace ConsoleApplication1.Models
{
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;

public class DemoContext : DbContext
{
public DbSet<Table1> Table1 { get; set; }
public DbSet<Table2> Table2 { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new AddressConfiguration());
}

private class AddressConfiguration : ComplexTypeConfiguration<Address>
{
public AddressConfiguration()
{
this.Property(x => x.Addr1).HasColumnName(“Addr1”);
this.Property(x => x.Addr2).HasColumnName(“Addr2”);
}
}
}
}

加上設定後資料表的樣子