error Marco de la entidad: se detectaron uno o más errores de validación durante la generación de modelo con clave compuesta

votos
0

Estoy recibiendo errores de validación cuando se utiliza Entity Framework 6.2. El código fue generado mediante el uso de código primero de una base de datos existente. La clave principal y clave externa son ambas versiones compuesto y su uso. El código ha sido desinfectada para mostrar sólo las partes pertinentes. Parece que se está tratando de cambiar los valores de versión e ID. Cualquier sugerencia sería muy apreciada.

public partial class MyParent
{
    public MyParent()
    {
        MyChild = new HashSet< MyChild >();
    }

    [Key]
    [Column(Order = 0)]
    [StringLength(50)]
    public string MyID { get; set; }

    [Key]
    [Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int MyVersion { get; set; }
}

public partial class MyChild
{
    [Key]
    [Column(Order = 0)]
    [StringLength(50)]
    public string ChildID { get; set; }

    [Required]
    [StringLength(50)]
    [ForeignKey(MyParent) Column(Order = 1)]
    public string MyID { get; set; }

    public string NextChild { get; set;}

    [Key]
    [Column(Order = 2)]
    [ForeignKey(MyParent)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int MyVersion { get; set; }

    public virtual MyParent MyParent { get; set; }
    public virtual ICollection<MyChild> MyChilds1 { get; set; }

    public virtual MyChild MyChild1 { get; set; }
}

public partial class MyContext : DbContext
{
    public MyContext()
        : base(name= MyContext )
    {
    }

    public MyContext (string connectionString) : base(connectionString)
    {
    }

    public virtual DbSet<MyParent> MyParent { get; set; }
    public virtual DbSet<MyChild> myChild { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyParent>()
            .HasMany(e => e.MyChild)
            .WithRequired(e => e.MyParent)
            .HasForeignKey(e => new { e.MyID, e.MyVersion })
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<MyChild>()
            .HasMany(e => e.MyChilds1)
            .WithOptional(e => e.MyChild1)
            .HasForeignKey(e => new { e.ChildID, e.MyVersion });
    }
}

error :

Se detectaron uno o más de validación errores durante la generación del modelo: MyParent_MyChild:: Los tipos de todas las propiedades en el papel dependiente de una restricción de referencia deben ser los mismos que los tipos de propiedad correspondientes en el papel principal El tipo de myVersion propiedad en la entidad. Mi hijo' no coincide con el tipo de propiedad 'MyID' en la entidad 'myparent' en la restricción de referencia 'MyParent_MyChild'.

MyParent_MyChild: Los tipos de todas las propiedades en el papel dependiente de una restricción de referencia deben ser los mismos que los tipos de propiedad correspondientes en el papel principal. El tipo de propiedad 'ChildID' en la entidad 'Mi hijo' no coincide con el tipo de propiedad 'myVersion' en la entidad 'myparent' en la restricción de referencia 'MyParent_MyChild'.

He añadido una solución para el caso simple. Fue añadir etiquetas ForeignKey y ajustar el orden de las columnas. Esto no funciona en los modelos más complejos, es decir, autorreferenciados tablas (NextChild).

Nuevo error:

$ Excepción { La propiedad de navegación 'Mi hijo', declaró el tipo 'MyChild.MyChilds1 se ha configurado con claves externas en conflicto.} System.InvalidOperationException

El código dB para las claves externas es:

    [PK_MyChild] PRIMARY KEY CLUSTERED ([ChildID] ASC, [MyVersion] ASC),
    [FK_MyChild_MyParent] FOREIGN KEY ([MyID], [MyVersion]) REFERENCES [dbo].[MyParent]([MyID], [MyVersion]),
    [FK_MyChild_MyChild] FOREIGN KEY ([NextChild], [MyVersion]) REFERENCES [dbo].[MyChild] ([ChildID], [MyVersion])
Publicado el 07/11/2018 a las 22:46
fuente por usuario
En otros idiomas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more