EF6: le Premier Code de Type Complexe

Je vais avoir de la difficulté à obtenir entity framework pour aplatir mon domaine les classes d'entité avec des Objets de Valeur (de type complexe) champs à une table.

Tout fonctionne si je dis à mon modèle de générateur d'ignorer mes objets de valeur/type complexe, mais que les résultats de tous les attributs de la valeur de l'objet en cours manqués dans mes tables. Dès que j'ai supprimer l'ignorer déclaration-je obtenir "Une valeur partagée entre les entités est créée dans plus d'un endroit". Si je regarde dans le résultat de CE fichier SQL que je vois une table supplémentaire nommé d'après mon Domaine classe ajoutée avec un 1 et contenant uniquement de la Valeur des paramètres d'Objet.

Code:

Mes Classes de domaine:

public User {

    private User(){}
    public long Id {get; private set;} //dont ask, inherited legacy database
    public string UserId { get; private set; }
    public string Domain { get; private set; }
    public AuditIformation AuditDetails {get ; private set;}

    //..domain logic etc
}

public AuditInformation : IValueObject {
    public long CreatedByUserId { get; private set; }
    public DateTime CreatedDate { get; private set; }
} 

Mon projet de dépôt (allant du premier code) a obtenu ceci:

public partial class myContext : DbContext {

    protected override void OnModelCreating(DbModelBuilder mb) {

        mb.Conventions.Remove<PluralizingTableNameConvention>(); 

        mb.ComplexType<Domain.Model.AuditInformation>();
        mb.ComplexType<Domain.Model.AuditInformation>().Property(a => a.CreatedDate).HasColumnName("Created_On");
        mb.ComplexType<Domain.Model.AuditInformation>().Property(a => a.CreatedByUserId).HasColumnName("Created_By");

        //This line lets everything work but doesn't include my 
        //AuditInformation attributes in my User Table.
        mb.Ignore<Domain.Model.AuditInformation>(); //<== I think I need to remove this

        //..

        mb.Entity<User>().Map(a => {
            a.Property(x => x.Id).HasColumnName("Id");
            a.Property(x => x.UserId).HasColumnName("User_Id");
            a.Property(x => x.Domain).HasColumnName("User_Dmain");
            })
        .HasKey(x => x.Id)
        .ToTable("Tbl_User");   //<==Again, dont ask

  }
}

Ce que je veux obtenir est une table qui ressemble à:

[TBL_USER] 
ID AS BIGINT,
USER_ID as VARCHAR(MAX),
USER_DMAIN AS VARCHAR(MAX),
CREATED_ON as DATE,
CREATED_BY as BIGINT

Mais ce que je obtenir seulement:

[TBL_USER] 
ID AS BIGINT,
USER_ID as VARCHAR(MAX),
USER_DMAIN AS VARCHAR(MAX),

et si je supprime l'ignorer ligne-je obtenir ce bonus freak table

[USER1]  <<==Note, named after the domain class, not the destination table.. 
ID AS BIGINT,
CREATED_ON as DATE,
CREATED_BY as BIGINT

et tout un tas d'erreur lorsque j'essaie d'utiliser mon référentiel:

----> System.Data.Entity.Infrastructure.DbUpdateException : A value shared across entities or associations is generated in more than one location. Check that mapping does not split an EntityKey to multiple store-generated columns.
----> System.Data.Entity.Core.UpdateException : A value shared across entities or associations is generated in more than one location. Check that mapping does not split an EntityKey to multiple store-generated columns.
----> System.ArgumentException : An item with the same key has already been added.
TearDown : System.NullReferenceException : Object reference not set to an instance of an object.

Nous avons fait beaucoup de recherche mais je ne peux pas trouver des exemples concrets de la persistance de ma valeur les attributs de l'objet dans les tableaux créés pour mes objets du domaine. Quelqu'un peut me montrer où je vais mal?

OriginalL'auteur Joe | 2014-02-23