Lerning Entity Framework 6 ------ Complex types


Complex types are classes that map to a subset of columns of a table.They don't contains key. They are the Value Objects. For example, you have a entity named Company:

public class Company
{
public int CompanyId { get; set; }

public string CompanyName { get; set; }

public string Street { get; set; }

public string City { get; set; }

public string Zip { get; set; }
}

You can Mondify it like this:

public class Company
{
public Company()
{
this.Address = new Address();
}
public int CompanyId { get; set; }

public string CompanyName { get; set; }

public Address Address { get; set; }
}

public class Address
{
public string Street { get; set; }

public string City { get; set; }

public string Zip { get; set; }
}

This structure can made the entity's meaning clearer than before. and the class Address can be used as a common value object for many classes. Now we complete all codes:

public class Company
{
public Company()
{
this.Address = new Address();
}
public int CompanyId { get; set; }

[MaxLength(100)]
public string CompanyName { get; set; }

public Address Address { get; set; }
}

public class Person
{
public Person()
{
this.Address = new Address();
}
public int PersonId { get; set; }

[MaxLength(50)]
public string PersonName { get; set; }

public Address Address { get; set; }
}

public class Address
{
[MaxLength(100)]
public string Street { get; set; }

[MaxLength(50)]
public string City { get; set; }

[MaxLength(10)]
public string Zip { get; set; }
}

public class MyContext:DbContext
{
public MyContext() : base("name=Test")
{

}

public DbSet Companies { get; set; }

public DbSet People { get; set; }
}

Then, execute following commands in NuGet command line:

  • Enable-Migrations
  • Add-Migration Init
  • Update-Database

Now, The table people and companies'structures like this:

图片.png-8.6kB

图片.png-8.9kB

Let's have a test:

static void Main(string[] args)
{
Address address = new Address
{
City = "BeiJing",
Street = "ChangAn Street",
Zip = "119"
};

Company company = new Company
{
CompanyName = "TianAnMen",
Address = address
};

Person person = new Person
{
PersonName = "伟人",
Address = address
};

using (MyContext db = new MyContext())
{
db.Companies.Add(company);
db.People.Add(person);

db.SaveChanges();
}
}

You can provide the configuration for complex types. We can do so by providing a configuration class . The only difference is that we use a different base class, ComplexTypeConfiguration, not EntityTypeConfiguration.

That's all.

posted @ 2017-05-16 09:05  会长  阅读(466)  评论(2)    收藏  举报