3

最初の簡単な背景: Entity Framework v1 を使用する既存の ASP.NET MVC 1 アプリケーションはかなりうまく機能しますが、40 個のテーブルに到達するため、.edmx は扱いにくくなり、Visual Studio 2008 デザイナーで破損する傾向があります。私がやりたいことは、DAL を移行して EF4 と Code-First を使用できるかどうかを確認することです。

最初は、単純な親子関係をモデル化しようとしていますが、あまり進んでいません。次の POCO クラスに対応する2 つのテーブルがClientあります。Address

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)

およびのデフォルトAddressオブジェクトを返すことを除けば、期待どおりにデータベースから 10 個の結果を返します。Client.WorkAddressClient.HomeAddress

私の推測ではObjectContext.ContextOptions.LazyLoadingEnabled = true、間違った場所に設定しているか、(より可能性が高い) と の間の関係ClientAddress正しく取得していません。

4

1 に答える 1

8

アドレスプロパティは仮想ではありません。プロパティが仮想でない限り、遅延読み込みはPOCOでは機能しません。

于 2010-07-23T13:30:17.503 に答える