实体拆分:将一个实体类拆分成多张表。
例:Code First模式下将实体User拆分为Users表和UserInfo表。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (var db = new DemoContext())
{
User user = new User { UserName = "Tony", Password = "3.1415926", RealName = "吴先森", Age = 25, Address = "BJ" };
db.Users.Add(user);
db.SaveChanges();
IEnumerable<User> users = db.Users.AsEnumerable<User>();
foreach (var u in users)
{
Console.WriteLine("UserName:{0}, Password:{1}.", u.UserName, u.Password);
}
}
Console.ReadKey();
}
}
//DbContent
public class DemoContext : DbContext
{
public DemoContext()
: base("name=DemoContext")
{
}
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//one entity to many tables
modelBuilder.Entity<User>()
.Map(m =>
{
m.Properties(t => new { t.Id, t.UserName, t.Password });
m.ToTable("Users");
})
.Map(m =>
{
m.Properties(t => new { t.Id, t.RealName, t.Age, t.Address });
m.ToTable("UserInfo");
});
base.OnModelCreating(modelBuilder);
}
}
//Entity
public class User
{
[Key]
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string RealName { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
}