2010-10-07 8 views
0

Nous avons deux entités avec des colonnes identiques mais le nom de l'entité est différent. Puis-je créer 2 entités en utilisant la première instance d'entité?Entity Framework 4.0. Création d'entité

Nous avons essayé de faire .AddObject ("Entity2 name", entityOneinstance) mais il échoue.

Veuillez indiquer si cela est possible ou une autre approche.

Merci à l'avance

Répondre

0

Depuis les types d'entités sont différentes, votre opération d'ajout tombera à coup sûr.

Vous aurez besoin d'un mappeur ou d'un opérateur de conversion (explicite/implicite) entre vos types d'entités je pense.

Pour être clair, la solution de conversation, supposons que vous avez Entity1 et Entity2 et les deux ont des propriétés, Property, Property_1, Property_2 et Property_3. Je suppose que vous avez une stratégie de génération de code par défaut (pas POCO ou sth). Ensuite, vous pouvez ajouter des classes partielles Entité2 et entity1 avec operatior de conversion implicite, par exemple:

public partial class Entity2 
{ 
    public static implicit operator Entity2(Entity1 entity1) 
    { 
     return new Entity2() 
     { 
      Property = entity1.Property, 
      Property_1 = entity1.Property_1, 
      Property_2 = entity1.Property_2, 
      Property_3 = entity1.Property_3 
     }; 
    } 
} 

Vous pouvez maintenant faire:

using (var provider = new Model1Container12()) 
{ 
    Entity1 entity1 = new Entity1(); 
    provider.AddObject(provider.Entity2Set.Name, entity1); 
    // or 
    provider.AddToEntity2Set(entity1); 
} 

La conversion sera faite implicitement que vous définissez dans l'opérateur de conversion définition.

Je ne sais pas si Entity Framework lui-même a une solution pour cette situation, mais la conversion semble être une solution pour moi. Ou vous pouvez également utiliser le type de chose AutoMapper. Je n'ai pas d'informations détaillées à ce sujet.

+0

dire que je dois créer des instances d'entités distinctes pour chacun? l'une ou l'autre des entités ne peut pas être réutilisée pour ajouter une autre entité dans la table de base de données? Veuillez clarifier. – Aaron

+0

Je suppose que vous devez créer une instance de type que vous voulez ajouter à votre contexte d'entité. J'ai mis à jour ma réponse. J'espère être utile. S'il vous plaît notifier si la réponse n'est pas claire, ou je me méprends sur la situation. –

0

En EF4, ObjectSet a été introduit, ce qui est un peu .. chouette

Mon approche serait d'utiliser modèle de référentiel ...

d'abord créer une classe de base abstraite ..

public abstract class BaseRepository<T> where T : class 
{ 
    #region Members 

    protected IObjectSet<T> _objectSet; 

    #endregion 

    #region Ctor 

    public BaseRepository(ObjectContext context) 
    { 
     _objectSet = context.CreateObjectSet<T>(); 
    } 

    #endregion 

    #region Methods 

    public void Add(T entity) 
    { 
     _objectSet.AddObject(entity); 
    } 

    public IEnumerable<T> GetAll() 
    { 
     return _objectSet; 
    } 

    #endregion 
} 

Créez ensuite une classe dérivée pour chaque tabel auquel vous devez accéder.

Un exemple (interface et implémentation): Le producteur est le ta bles objet POCO.

Interface:

public interface IProducerRepository 
{ 
    Producer GetById(int id); 
    void Add(Producer entity); 
    IEnumerable<Producer> GetAll(); 
} 

Mise en œuvre:

public class ProducerRepository : BaseRepository<Producer>, IProducerRepository 
{ 
    #region Ctor 

    public ProducerRepository(ObjectContext context) : base(context) 
    { 
    } 

    #endregion 

    #region Methods 

    public Producer GetById(int id) 
    { 
     return _objectSet.SingleOrDefault(e => e.Id == id); 
    } 


    #endregion 
} 

Hope this helps .. :-)

Questions connexes