更新: を使用すべきではないことを理解したDbSet
ので、Erenga の提案に従って実装を ICollection に変更しました
次のクラスを検討してください。
[Table("Tenant")]
public class Tenant : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
[Key]
public string Guid { get; set; }
public virtual ICollection<User> Users { get; set; }
}
[Table("User")]
public class User : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public string Password { get; set; }
}
最初のテストでは、新しいテナントと新しいユーザーを作成し、それらを適切なテーブルに格納します。
[Test]
public void CreateNewUserForNewTenant()
{
var user = _applicationContext.Users.Create();
user.Name = "barney";
user.EmailAddress = "barney@flinstone.com";
var tenant = _applicationContext.Tenants.Create();
tenant.Name = "localhost";
tenant.Guid = Guid.NewGuid().ToString();
tenant.Users.Add(user); // NullReferenceException, I expected the EF would LazyLoad the reference to Users?!
_tenantRepository.Add(tenant);
_applicationContext.SaveChanges();
}
NullReferenceException
プロパティ Users が初期化されていないため、このテストは失敗します。
EF で提供される LazyLoading に依存できるコードをどのように変更すればよいですか?