У меня возникла проблема с отображением свойств объектов объектов/сложных типов для сущностей. У меня есть пользовательский объект, который имеет свойство сложного типа, называемое Credential, которое, в свою очередь, имеет свойства: Email, UserName, Password и SecurityStamp. Я пытаюсь сопоставить свойство от сложного типа для лиц, а также исходный код показан ниже:Entity Framework: свойство «ComplexType.Field» не существует или не отображается для ввода «Entity»
public class User
{
public string Id { get; protected set; }
public Credential Credential { get; protected set; }
// unrelated properties and methods omitted for simplicity
}
public sealed class Credential: ValueObject<Credential>
{
public string Email { get; private set; }
public string UserName { get; private set; }
public string Password { get; private set; }
public string SecurityStamp { get; private set; }
public Credential() { }
public Credential(string email, string userName, string password, string securityStamp)
{
Email = email;
UserName = userName;
Password = password;
SecurityStamp = securityStamp;
}
public class CoreContext: DbContext
{
public IDbSet<User> Users { get; set; }
public CoreContext(string connectionString) : base(connectionString) {}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<CoreContext>(null);
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.Email).HasColumnName("Email");
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.UserName).HasColumnName("UserName");
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.Password).HasColumnName("Password");
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.SecurityStamp).HasColumnName("SecurityStamp");
modelBuilder.Entity<User>().Property(u => u.Credential.Email).HasColumnName("Email");
modelBuilder.Entity<User>().Property(u => u.Credential.UserName).HasColumnName("UserName");
modelBuilder.Entity<User>().Property(u => u.Credential.Password).HasColumnName("Password");
modelBuilder.Entity<User>().Property(u => u.Credential.SecurityStamp).HasColumnName("SecurityStamp");
}
}
Как вы видите, я пытался отобразить сложные свойства типа к объекту. Я начал с настройки Credential как сложного типа, а затем настроил свойства на пользователе пользователя. Однако, я получаю следующую ошибку:
The 'Credential.Email' property does not exist or is not mapped for the type 'User'.
Я не понимаю, почему это происходит. Я сделал все возможное, чтобы настроить сложное отображение типов, почему это не работает? У кого-нибудь есть идеи о том, что я, возможно, сделал неправильно?
u.Credential - это свойство навигации, которое вы уже сопоставили в строках ранее. удалите эти 4 последние строки, так как это НИКАКИЕ свойства объекта User. – DevilSuichiro
@DevilSuichiro: Как вы сказали, такое же сообщение об ошибке, как и раньше, оно не решает проблему. –
@ LordYggdrasill Вы когда-нибудь решали эту проблему? – rleffler