0

私はまだ EF の学習過程にあり、EF の遅延読み込みに慣れようとしています。

次のクラスとテストを検討してください。

[Table("Tenant")]
public class  Tenant : IEntity
{
    public int Id { get; set; }
    public virtual string Name { get; set; }
    [Key]
    public string Guid { get; set; }
    public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<CaseType> CaseTypes { get; set; }

    public Tenant()
    {
        Users = new List<User>();
        CaseTypes = new List<CaseType>();
    }
}

そしてテスト:

    [Test]
    public void TenantLazyLoading()
    {
        var tenant = _applicationContext.Tenants.Create();
        tenant.Guid = "d176dc7c-6b96-4ab6-bddf-ce5a12024c39";
        _applicationContext.Tenants.Attach(tenant);
        Assert.AreEqual(1, tenant.Users.Count); // Pass, the navigation property users was loaded (lazy)
        Assert.AreEqual("localhost", tenant.Name); // Fail, the tenant name is not loaded
    }

遅延読み込みは、明らかにナビゲーション プロパティでのみ機能し、テナント プロパティでは機能しません。両方のプロパティ (UsersName) を仮想にしましたが、それは問題ではないようです。

lazy loadのローカル プロパティを取得するにはどうすればよいTenantですか?

4

1 に答える 1

1

それが仕組みです。エンティティを手動で作成し、それをコンテキストに追加すると、エンティティのスカラー プロパティをロードしたくないAttachことを EF に伝えます。

スカラー プロパティの遅延読み込みはありません。追加することによって、常に明示的に行う必要があります...

_applicationContext.Entry(tenant).Reload();

...後、Attachまたは最初の 3 行を次のように置き換えます。

var tenant = _applicationContext.Tenants
    .Find(new Guid("d176dc7c-6b96-4ab6-bddf-ce5a12024c39"));
于 2013-01-27T20:42:52.350 に答える