3
首先给出一些简要背景:我有一个使用实体框架v1的现有ASP.NET MVC 1应用程序,它工作得很好,不过因为有了40个表格,.edmx使用Visual Studio 2008设计器变得笨拙并容易出现腐败。 我想要做的是看看迁移DAL以使用EF4和Code-First是否可行。实体框架4代码优先定制表映射Fluent API问题
最初我试图建立简单的父母/子女关系,但没有变得很远。我有2个表Client
和Address
其对应于以下POCO类:
public class Client
{
public int ClientId { get; set; }
public string Name { get; set; }
public Address HomeAddress { get; set; }
public Address WorkAddress { get; set; }
// More properties here
}
public class Address
{
public int AddressId { get; set; }
public string NameOrNumber { get; set; }
public string Line1 { get; set; }
// More properties here
}
另外我有一个DbContext
类中,我使用流畅API定义的关系:
public class AppContext : DbContext
{
public SlobContext() : base()
{
this.ObjectContext.ContextOptions.LazyLoadingEnabled = true;
}
public DbSet<Client> Clients
{
get;
set;
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Address>().MapSingleType().ToTable("Address");
modelBuilder.Entity<Client>().HasKey(c => c.ClientID);
modelBuilder.Entity<Client>().HasRequired<Address>(c => c.HomeAddress);
modelBuilder.Entity<Client>().HasRequired<Address>(c => c.WorkAddress);
modelBuilder.Entity<Client>()
.MapSingleType(c => new
{
Name = c.Name,
ClientID = c.ClientID,
HomeAddressID = c.HomeAddress.AddressID,
WorkAddressID = c.WorkAddress.AddressID
})
.ToTable("Client");
}
}
所以然后在我的控制器我可以返回以下作为我的型号:
Context.Clients.Take(10).OrderBy(i => i.Name)
它从数据库返回10个结果如预期的那样,除了它返回Client.WorkAddress
和Client.HomeAddress
的默认对象Address
。
我的猜测是,无论我在错误的地方设置ObjectContext.ContextOptions.LazyLoadingEnabled = true
,或(更可能)我没有得到我的Client
和Address
之间的关系正确。
Craig。非常感谢 - 是的,您的POCO课程中的所有集合都必须是虚拟的。 – 2010-07-28 15:26:55