In meiner Anwendung ich User
Wie kann eine komplexe Eigenschaft als Bezeichner in der Entity Framework AddOrUpdate-Methode verwendet werden?
public class User
{
private ICollection<User> friends;
private ICollection<Album> albums;
public User()
{
this.albums = new HashSet<Album>();
this.friends = new HashSet<User>();
}
public int Id { get; set; }
public UserInfo UserInfo { get; set; }
public int BornTownId { get; set; }
public Town BornTown { get; set; }
public int CurrentLivingTownId { get; set; }
public Town CurrentLivingTown { get; set; }
public virtual ICollection<User> Friends
{
get
{
return this.friends;
}
set
{
this.friends = value;
}
}
public virtual ICollection<Album> Albums
{
get
{
return this.albums;
}
set
{
this.albums = value;
}
}
}
Hier haben ein Modell ist UserInfo
ein komplexer Typ, die wie folgt aussieht: mit context.Users.AddOrUpdate(u => u.UserInfo.Username, user);
,
[ComplexType]
public class UserInfo
{
[Required]
[MaxLength(30)]
[MinLength(2)]
[Column("FirstName",TypeName = "varchar")]
public string FirstName { get; set; }
[Required]
[MaxLength(30)]
[MinLength(2)]
[Column("LastName", TypeName = "varchar")]
public string LastName { get; set; }
[NotMapped]
public string FullName => this.FirstName + " " + this.LastName;
[Required]
[MaxLength(30)]
[MinLength(4)]
[Column("Username", TypeName = "varchar")]
public string Username { get; set; }
[Required]
[MinLength(6)]
[MaxLength(50)]
[Column("Password", TypeName = "varchar")]
[PasswordValidation]
public string Password { get; set; }
[Required]
[Column("Email", TypeName = "varchar")]
[DataType(DataType.EmailAddress)]
[EmailValidation]
public string Email { get; set; }
[Column("RegisteredOn")]
public DateTime RegisteredOn { get; set; }
[Column("LastTimeLoggedIn")]
public DateTime LastTimeLoggedIn { get; set; }
[Range(1, 120)]
[Column("Age")]
public int Age { get; set; }
[Column("IsDeleted")]
public bool IsDeleted { get; set; }
}
Wenn ich versuche, Daten für die Tabelle Benutzer auf Saatgut ich erhalte die folgende Fehlermeldung:
Message=The properties expression 'u => u.UserInfo.Username' is not valid. The expression should represent a property: C#: 't => t.MyProperty'.
Mein Quest Ion (das ist so komplex wie das Ziel des Problems) ist: Was ist die korrekte syntaktische Art, u.UserInfo.Username
als Bezeichner in AddOrUpdate zu verwenden, sollte ich ein beliebiges Tag zu UserInfo
Klasse oder Eigenschaft hinzufügen oder Änderungen mit der FluentApi
vornehmen und was ich Ich versuche, eine ordnungsgemäße Methode zur Verwendung von AddOrUpdate zu verwenden.
Ich realisiere, dass ich Username
aus UserInfo nehmen und es direkt in User
setzen kann, aber ich strebe eine "breitere" Lösung an.
Jede Hilfe wird sehr geschätzt. Vielen Dank.
Nur neugierig, wenn Sie AddorUpdate nicht tun, erstellt EF Spalten für die Eigenschaften Ihres komplexen Typs? – CodingYoshi
@Coding Yoshi EF fügt Spalten hinzu, wenn ich AddOrUpdate das erste Mal auf diese Weise benutze, aber die Werte nicht seed, es wirft Ausnahme in nachfolgenden Seeds.Wenn ich AddOrUpdate ohne Bezeichner verwende, sät es auch die Tabelle mit den angegebenen Werten. –