2013-03-01 1 views
1

J'ai eu un problème avec le code d'abord et la base de données SQL générée.EF ajoute un FK déjà défini

Est une application sur les taureaux et les vaches

Voici mes classes:

public class Animal : BaseEntity 
{ 
    public virtual int? DeathId { get; set; } 
    public virtual Death Death { get; set; } 

    public virtual int? SellId { get; set; } 
    public virtual Sell Sell { get; set; } 
} 

public class Death : Event 
{ 
    public virtual int AnimalId { get; set; } 
    public virtual Animal Animal { get; set; } 
} 

public class Sell : Event 
{ 
    public virtual int AnimalId { get; set; } 
    public virtual Animal Animal { get; set; } 
} 

qui génère ce script sql:

create table [dbo].[Animal] (
    [Id] [int] not null identity, 
    [DeathId] [int] null, 
    [SellId] [int] null, 
    primary key ([Id]) 
); 
create table [dbo].[Death] (
    [Id] [int] not null, 
    [AnimalId] [int] not null, 
    primary key ([Id]) 
); 
create table [dbo].[Sell] (
    [Id] [int] not null, 
    [AnimalId] [int] not null, 
    primary key ([Id]) 
); 

Tout normal, mais le problème est avec ces classes :

public class Servicie : Event 
{ 
    public virtual int MaleId { get; set; } 
    public virtual Male Male { get; set; } 

    public virtual int FemaleId { get; set; } 
    public virtual Female Female { get; set; } 

    public virtual int? ChildbirthId { get; set; } 
    public virtual Childbirth Childbirth { get; set; } 
} 

public class Childbirth : Event 
{ 
    public virtual int ServicieId { get; set; } 
    public virtual Servicie Servicie { get; set; } 

    public virtual int FemaleId { get; set; } 
    public virtual Female Female { get; set; } 
} 

Ces classes génèrent ce script Sql:

create table [dbo].[Service] (
    [Id] [int] not null, 
    [MaleId] [int] not null, 
    [FemaleId] [int] not null, 
    [ChildbirthId] [int] null, 
    primary key ([Id]) 
); 
create table [dbo].[Parto] (
    [Id] [int] not null, 
    [Servicie_Id] [int] not null, 
    [ServicieId] [int] not null, 
    [FemaleId] [int] not null, 
    primary key ([Id]) 
); 

Comme vous pouvez le voir, il y a "ServicieId" et "Servicie_Id", le dernier, auto ajouté.

Tous sont de 1 à 0..1 relations et je ne vois pas de différence, quelqu'un peut-il m'aider?

+0

S'il vous plaît et simplifier traduisons votre exemple de code. Je ne peux pas vraiment le dire, mais je peux faire une bonne supposition que la plupart ne sont pas pertinentes à votre question. (Comme tout le code pour les entités qui fonctionnent comme vous voulez.) – millimoose

+0

Traduit! Dites-moi si vous comprenez plus maintenant –

Répondre

0

EDIT - application test complet ajouté:

Quand j'utilisé ce modèle (version simpliee de la vôtre). Je devais ajouter une annotation requise afin qu'EF sache quel était le principal et quelle était la fin dépendante, cela devenait confus.

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Text; 

namespace CFExamples2 
{ 
    public class Servicio 
    { 
     public int Id { get; set; } 

     public int? PartoId { get; set; } 
     public virtual Parto Parto { get; set; } 
    } 

    public class Parto 
    { 
     public int Id { get; set; } 
     public virtual int ServicioId { get; set; } 
     [Required] 
     public virtual Servicio Servicio { get; set; } 
    } 


    public class Model : DbContext 
    { 
     public DbSet<Servicio> Servicios { get; set; } 
     public DbSet<Parto> Partos { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 

     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 


     } 
    } 
} 

Il a produit ceci:

enter image description here

+0

J'ai essayé et obtenu ceci: La multiplicité n'est pas valide dans le rôle 'Servicio_Parto_Target' dans la relation 'Servicio_Parto'. Parce que les propriétés du rôle dépendant ne sont pas les propriétés clés, la limite supérieure de la multiplicité du rôle dépendant doit être * Rôle doit être * –

+0

Recherche sur internet, j'ai trouvé ce [post] (http://weblogs.asp.net/ manavi/archive/2011/05/01/associations-en-ef-4-1-code-premier-partie-5-one-to-one-foreign-key-associations.aspx). On dirait que EF ne supporte pas totalement une à une relation avec des clés étrangères –

+0

Oh, je ne savais pas que c'est un 1: 1 - ouais vous ne pouvez pas avoir un FK, pourquoi ne pas l'avoir partager le PK (le seul vrai EF peut le faire) –

Questions connexes