La cartographie de clé étrangère dans HasOptional().WithOptionalDependent() relation dans l'Entity Framework 6

J'ai les données suivantes-modèle Entity Framework 6.1.3:

using System.Data.Entity;

public class Student
{
    public int Id { get; set; }
    public virtual Contact Contact { get; set; }
}

public class Contact
{
    public int Id { get; set; }
    public virtual Student Student { get; set; }
}

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder builder)
    {
        builder.Entity<Contact>()
            .HasOptional(x => x.Student)
            .WithOptionalDependent(x => x.Contact)
            .WillCascadeOnDelete(true);
    }
}

public static class Program
{
    private static void Main()
    {
        Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());

        using (var context = new MyContext())
            context.Database.Initialize(force: true);
    }
}

Lorsque je lance ce code, j'obtiens exactement la structure de la table, je poursuis:

dbo.Contacts
    Id (PK)
    Student_Id (FK, NULL, CASCADE ON DELETE)

dbo.Students
    Id (PK)

Cependant, maintenant, je voudrais ajouter la Student_Id propriété disponible dans le Contact entité. Donc, je peux lire le Student_Id sans avoir à se joindre à l'autre de la table à travers .Student.Id de navigation.

Si je l'ajout de la propriété de la Contact entité, je me retrouve soit avec deux colonnes Student_Id et Student_Id1, ou je me retrouve avec un message d'erreur disant Each property name in a type must be unique..

La colonne est déjà dans la base de données, j'ai besoin de l'avoir dans l'entité ainsi, pourquoi est-il tant de mal? Est-il une solution?

Vous pouvez empêcher l'EF à partir implicitement de la création de la FK champ en l'ajoutant à votre modèle: public int Student_Id { get; set; } indiquent Ensuite c'est la clé étrangère pour la navigation de la propriété, avec une annotation ou fluide.
J'ai essayé de faire ceci, cependant, comme je l'ai dit dans la question, l'EF ne me laisse pas faire. Il crée deux colonnes ou il se plaint de l'unicité des noms de propriété. J'ai essayé d'expérimenter avec l'ajout du champ de modèle, j'ai même essayé de la configuration de la relation avec le MapKey fonction, sans succès.
À droite, vous devez dire à EF comment faire de l'association avec HasForeignKey ou MapKey. patrickdesjardins.com/blog/...
Merci pour l'aide. Le problème avec HasForeignKey est qu'il est uniquement disponible en WithMany relations. Et lorsque j'essaie d'utiliser MapKey, je me retrouve soit avec deux colonnes ou avec l'erreur que j'ai mentionnés.

OriginalL'auteur Tom Pažourek | 2015-08-31