Impossible de déterminer la fin principale d'une association - Premier modèle d'entité
J'ai créé le Modèle de Données d'Entité dans Visual Studio. Maintenant, j'ai un fichier avec des requêtes SQL et des classes C# généré à partir du Modèle.
Question:
Classes sont générées sans annotations de code ou de derrière (API Fluent). Est-il OK? J'ai essayé de lancer mon application, mais une exception a été levée:
Impossible de déterminer les principales d'une association entre les types de Runnection.Modèles.Adresse " et " Runnection.Modèles.L'utilisateur". Le principal de cette association doit être explicitement configuré à l'aide de la relation API fluent ou des annotations de données.
J'ai lu que je ne peux pas utiliser l'API Fluent avec "Premier Modèle". Que puis-je faire?
Code:
Utilisateur
public partial class User
{
public User()
{
this.Events = new HashSet<Event>();
this.CreatedEvents = new HashSet<Event>();
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Photo { get; set; }
public int EventId { get; set; }
public string Nickname { get; set; }
public OwnerType OwnerType { get; set; }
public NetworkPlaceType PlaceType { get; set; }
public virtual ICollection<Event> Events { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Event> CreatedEvents { get; set; }
public virtual Owner Owner { get; set; }
}
Adresse
public partial class Address
{
public int Id { get; set; }
public string Street { get; set; }
public string StreetNumber { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
public virtual User User { get; set; }
}
Contexte
//Le Premier modèle n'utilise pas cette méthode
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Address>().HasRequired(address => address.User)
.WithRequiredDependent();
modelBuilder.Entity<User>().HasRequired(user => user.Address)
.WithRequiredPrincipal();
base.OnModelCreating(modelBuilder);
}
source d'informationauteur Michal
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier le principal dans un one-to-one relation.
En spécifiant un FK contrainte, EF sait l'Utilisateur doit existe tout d'abord (le principal) et l'Adresse de la façon suivante.
Lectures complémentaires sur le site MSDN.
Voir également cette SORTE de réponse.
Mis à jour à partir des commentaires
Dans le designer, sélectionnez l'association (ligne entre les Utilisateurs & Adresse). Dans la fenêtre propriétés, cliquez sur le bouton avec le [...] sur la Contrainte Référentielle (ou double cliquez sur la ligne). Définir le Capital en tant qu'Utilisateur.
D'erreur:
Avait même message d'erreur "Impossible de déterminer les principales d'une association entre les types de Providence.Commun.Les données.Lot " et " la Providence.Commun.Les données.Lot". Le principal de cette association doit être explicitement configuré à l'aide de la relation API fluent ou des annotations de données.".
TOUTEFOIS, notez que c'est la MÊME table.
Cause: Ma base de données MS SQL Server. Malheureusement, lors de MS SQL Server Management Studio ajoute des clés étrangères, il ajoute de la valeur par défaut de la clé étrangère comme Lot de colonne ID de la table de traitement par Lots permettant de revenir à lui-même. Vous, en tant que développeur sont suppose de choisir un autre tableau et l'id de vraiment de clé étrangère, mais si vous ne parvenez pas à elle va encore permettre l'entrée de l'auto référencement FK.
Solution:
La Solution a été de supprimer la valeur par défaut de la FK.
Cause 2: un Autre cas est celui de la table peut être fixé, mais la vieille image de la table lorsque l'EF de l'edmx a été fait a la valeur par défaut de la FK.
Solution 2: supprimer la table à partir de l'explorateur de modèles, de Types d'Entité de la liste et cliquez sur "oui" puis "mettre à Jour le Modèle de la Base de données".