Я использую EF Core 2.2.У меня есть два контекста в моем приложении.Один - AppIdentityDbContext
для работ, связанных с идентификацией, а другой - AppContext
для работ, связанных с приложениями.
У меня есть класс идентификации пользователя - ApplicationUser
-, который имеет отношение к Profile
сущности из AppContext
и объект Profile
в свою очередь владеет объектом значения ProfileContact
.
Вот код:
ApplicationUser
public class ApplicationUser : IdentityUser<Guid>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Designation { get; set; }
public Guid ProfileId { get; set; }
public Profile Profile { get; set; }
}
Профиль
public class Profile : BaseEntity<Guid>, IAggregateRoot
{
private Profile()
{
// required by EF
}
public Profile(string brandName, ProfileContact profileContact)
{
BrandName = brandName;
ProfileContact = profileContact;
}
public string BrandName { get; set; }
public ProfileContact ProfileContact { get; private set; }
}
ProfileContact
public class ProfileContact // ValueObject
{
private ProfileContact()
{
// required by EF
}
public ProfileContact(string email, string phone, string mobile)
{
Email = email;
Phone = phone;
Mobile = mobile;
}
public string Email { get; private set; }
public string Phone { get; private set; }
public string Mobile { get; private set; }
}
IAggregateRoot
IAggregateRoot
- пустой интерфейс, используемый для ограничения сущностей от использования общих репозиториев в моем проекте.
public interface IAggregateRoot
{
}
AppContext
Вот конфигурация объекта «Профиль» в AppContext
.
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Profile>(ConfigureProfile);
}
private void ConfigureProfile(EntityTypeBuilder<Profile> builder)
{
builder.Property(p => p.BrandName)
.IsRequired()
.HasMaxLength(50);
builder.OwnsOne(p => p.ProfileContact);
}
Я настроил ProfileContact
как принадлежащийProfile
сущность.
Теперь, когда пользователь входит в систему, я получаю эту ошибку:
Описание ошибки ">
стек ошибок ">
Вот мой логин Post
метод.Я использую шаблон скаффолдинга Asp.Net Core Identity.
Вход в систему - OnPostAsync
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(Input.MobileNumber, Input.Password, Input.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
....
// If we got this far, something failed, redisplay form
return Page();
}
Требуется ли ключ объекта значения / собственного типа для определения?Что я прочитал и понял о OwnedTypes
, так это то, что они принадлежат одной и той же таблице, но могут использоваться как объект.Я делаю что-то не так?или мне нужно добавить свойство Id
к ProfileContact
.Если так, то почему?Пожалуйста, помогите.