2010-10-07 7 views
0

У нас есть два объекта с одинаковыми столбцами, но имя объекта отличается. Могу ли я создать 2 объекта, используя первый экземпляр объекта?Entity Framework 4.0. Создание Entity

Мы попытались сделать .AddObject («Entity2 name», entityOneinstance), но он не работает.

Просьба указать, возможно ли это или какой-либо другой подход.

Заранее спасибо

ответ

0

Поскольку типы сущностей различны, ваша операция добавления будет падать точно.

Вам понадобится оператор преобразования или (явный/неявный) оператор преобразования между типами сущностей, которые я думаю.

Для того, чтобы понять, для решения разговор, предположим, что у вас есть Entity1 и Entity2, и оба имеют свойства, Property, Property_1, Property_2 и Property_3. Я предполагаю, что у вас есть стратегия генерации кода по умолчанию (не POCO или sth). Затем вы можете добавить частичные классы entity2 и entity1 с неявным operatior преобразования, например:

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 
     }; 
    } 
} 

Так теперь вы можете сделать:

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

Конверсия будет неявно, как вы определяете в операторе преобразования определение.

Я не знаю, имеет ли в Entity Framework решение для этой ситуации, но преобразование кажется для меня решением. Или вы также можете использовать AutoMapper. У меня нет подробной информации об этом.

+0

означает, что я должен создать отдельные экземпляры сущностей для каждого из них? ни один объект не может быть повторно использован для добавления другого объекта в таблицу базы данных? Просьба уточнить. – Aaron

+0

Я думаю, вам нужно создать экземпляр типа, который вы хотите добавить в контекст вашего объекта. Я обновил свой ответ. Надеюсь быть полезным. Пожалуйста, сообщите, если ответ не ясен или я неправильно понимаю ситуацию. –

0

В EF4, ObjectSet был введен, который является своего рода отличный ..

Мой подход будет использовать хранилище шаблон ...

Сначала нужно создать абстрактный базовый класс ..

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 
} 

Затем создайте производный класс для каждой таблицы, к которой вам нужно получить доступ.

Пример (интерфейс и реализация): Производитель - та bles POCO объект.

Интерфейс:

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

Реализация:

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 
} 

Надеется, что это помогает .. :-)