Je produis un modèle simple d'entité à motif composite en utilisant EF4 w/code-première caractéristique CTP:Cartographie des relations dans le code uniquement EF4 CTP (lors de l'utilisation d'héritage?)
public abstract partial class CacheEntity
{
[Key]public string Hash { get; set; }
public string Creator { get; set; }
public int EntityType { get; set; }
public string Name { get; set; }
public string Predecessor { get; set; }
public DateTime DateTimeCreated { get; set; }
public virtual ICollection<CacheReference> References { get; set; }
}
public partial class CacheBlob : CacheEntity
{
public byte[] Content { get; set; }
}
public partial class CacheCollection : CacheEntity
{
public virtual ICollection<CacheEntity> Children { get; set; }
}
public class CacheReference
{
public string Hash { get; set; }
[Key]public string Reference { get; set; }
public virtual CacheEntity Entity { get; set; }
}
public class CacheEntities : DbContext
{
public DbSet<CacheEntity> Entities { get; set; }
public DbSet<CacheReference> References { get; set; }
}
Avant je partage la les classes primitives/collecte dérivée tout fonctionnait bien, mais maintenant je reçois ceci:
Unable to determine the principal end of the 'Cache.DataAccess.CacheEntity_References'
relationship. Multiple added entities may have the same primary key.
je me suis dit qu'il aurait pu se confondre, donc je pensais que je l'épeler en utilisant explicitement l'interface fluide, plutôt que les attributs DataAnnotation. Voici ce que Je pense que définit la relation correctement:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<CacheEntity>().HasKey(ce => ce.Hash);
modelBuilder.Entity<CacheEntity>().HasOptional(ce => ce.References).WithMany();
modelBuilder.Entity<CacheReference>().HasKey(ce => ce.Reference);
modelBuilder.Entity<CacheReference>().HasRequired(cr => cr.Entity).WithOptional();
}
Mais je dois me tromper, parce que maintenant je reçois ceci:
Entities in 'CacheEntities.CacheReferenceSet' participate in the
'CacheReference_Entity' relationship. 0 related 'Entity' were found. 1 'Entity' is expected.
Diverses autres façons d'utiliser le rendement de l'API couramment erreurs différentes, mais rien ne réussit, alors je commence à me demander si cela doit être fait différemment quand j'utilise l'héritage.
Des indices, des liens, des idées, des conseils seraient les bienvenus.