Entity Framework 4.0. Создание сущности - PullRequest
0 голосов
/ 07 октября 2010

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

Мы пытались сделать .AddObject ("Имя сущности2", entityOneinstance), но это не удалось.

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

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

Ответы [ 2 ]

0 голосов
/ 11 ноября 2010

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

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

Пример (интерфейс и реализация): Производителем является объект 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
}

Надеюсь, это поможет ..: -)

0 голосов
/ 07 октября 2010

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

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

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

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 . У меня нет подробной информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...