La propriété doit être valide, le type d'entité et de la propriété doit avoir un non-abstraite getter et setter. Entity Framework
J'ai un problème en ce qui concerne la création d'une base de données de code de la première dans le cadre de l'entité. J'ai trois classes 1 Personne, 2 PersonAddress, 3 PersonEmploymentHistory comme indiqué ci-dessous.
namespace DataAccess.Models
{
[Table("Profile")]
public class Person
{
[Key]
public int UserId { get; set; }
[Required(ErrorMessage = "Firstname is required")]
public string PersonFirstName { get; set; }
[Required(ErrorMessage = "Surname is required")]
public string PersonSurname { get; set; }
[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
public string PersonEmail { get; set; }
public int Age { get; set; }
[Required(ErrorMessage = "Contact Number required")]
public Int64 PersonNumber { get; set; }
public bool IsActive { get; set; }
[ForeignKey("AddressDetails")]
public int AddressId { get; set; }
public virtual PersonAddress AddressDetails { get; set; }
[ForeignKey("EmploymentHistory")]
public int EmployerId { get; set; }
public virtual PersonEmploymentHistory EmploymentHistory { get; set; }
}
}
PersonAddress Classe
namespace DataAccess.Models
{
[Table("AddressDetails")]
public class PersonAddress
{
[Key]
public int AddressId { get; set; }
[ForeignKey("UserId")]
public int UserId { get; set; }
[Required(ErrorMessage = "Address Line 1 required")]
public string AddressLine1 { get; set; }
[Required(ErrorMessage = "Address Line 2 required")]
public string AddressLine2 { get; set; }
[Required(ErrorMessage = "Postcode required")]
[DataType(DataType.PostalCode)]
public string PostCode { get; set; }
}
}
PersonEmploymentHistory
namespace DataAccess.Models
{
[Table("EmploymentHistory")]
public class PersonEmploymentHistory
{
[Key]
public int EmployerId { get; set; }
public string EmployerName { get; set; }
public decimal EmployeeSalary { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string ReasonForLeaving { get; set; }
[ForeignKey("UserId")]
public int UserId { get; set; }
}
}
Et c'est ma classe de Contexte
public class Context : DbContext
{
public Context()
: base("DefaultConnection")
{
Database.SetInitializer<Context>(new CreateDatabaseIfNotExists<Context>());
}
public DbSet<Person> Person { get; set; }
public DbSet<PersonAddress> PersonAddress { get; set; }
public DbSet<PersonEmploymentHistory> PersonEmployment { get; set; }
}
Maintenant, j'ai suivi des tutoriels lors de la création de clés étrangères, etc, mais quand je lance mon projet et d'essayer d'insérer des données dans la table personne j'obtiens l'erreur suivante
La propriété 'UserId' ne peut pas être configuré comme une propriété de navigation. La propriété doit être valide, le type d'entité et de la propriété doit avoir un non-abstraite getter et setter. Pour les propriétés de collection le type doit mettre en œuvre ICollection où T est valide d'un type d'entité.
- Double Possible: stackoverflow.com/questions/21856218/...
Vous devez vous connecter pour publier un commentaire.
Je suis en train d'apprendre le code de la première également. Je suis à l'aide de l'API fluent donc je ne suis pas aussi expérimenté avec des annotations. Je pense que la façon dont vous faites vos clés étrangères est faux. Je pense qu'ils devraient ressembler à ça:
La différence est que vous avez une variable du type de la FK et annoter que. Vous pouvez aussi regarder l'API fluent.
voir http://www.codeproject.com/Articles/319366/EF-Code-First-Add-a-Foreign-Key-relationship
Dans le ForeignKey vous devez ajouter la classe de référence. Changement:
[ForeignKey("Person")]
il ne fonctionne pas. Vous avez besoin d'utiliser[ForeignKey("User")]
je pense.