Используя Entity Framework с «динамической» сущностью? - PullRequest
0 голосов
/ 11 октября 2011

Например, у меня есть 3 объекта: продукт, инструмент, устройство.Все они имеют атрибуты «id» и «Name».Теперь я пытаюсь написать метод, чтобы заполнить данные объекта в выпадающий список.Но сейчас я не знаю, как создать метод, который может передавать в него любую сущность.Пример кода ниже:

    private comboBox FillCombobox(List<EntityType>)
    {
        using (dowacodbEntities dowacodbEntities = new dowacodbEntities())
        {
            comboBox comboBox = new comboBox();
            List<EntityType> EntityList = dowacodbEntities.EntityType.ToList();
            DataTable dt = new DataTable();
            dt.Columns.Add("id");
            dt.Columns.Add("Name");
            dt.Rows.Add(-1, "Choose one option");
            foreach (EntityType Entity in EntityList)
            {
                dt.Rows.Add(Entity.id, Entity.Name);
            }
            comboBox.ValueMember = dt.Columns[0].ColumnName;
            comboBox.DisplayMember = dt.Columns[1].ColumnName;
            comboBox.DataSource = dt;
            return combobox;
        }
    }

Какой EntityType может быть product , tool или device .

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Определить интерфейс:

public interface IBaseEntity
{
    int Id { get; }
    string Name { get; }
}

Реализовать этот интерфейс в ваших Product, Tool и Device классах (он может быть реализован вашей частичной частью, если сущности генерируются автоматически) и определить ваш методкак:

private ... FillCombobox<T>(...) where T : class, IBaseEntity
{
    using (var context = new Context())
    {
        var entities = context.CreateObjectSet<T>().ToList();
        ...
        foreach (IBaseEntity entity in entities)
        {
            dt.Rows.Add(entity.Id, entity.Name);
        }
        ...
    }
}
1 голос
/ 11 октября 2011

У меня есть аналогичный базовый элемент управления для страниц ASP.NET, который мы используем, и мы следуем предложению Натана Квиринена.В вашем случае есть элемент управления базовой сущностью со свойствами ID и Name, которые передаются подклассам.С помощью этого элемента управления мы загружаем тот же выпадающий список, который затем используется для заказов, оборудования и всех типов других объектов.

public interface EntityLoader<T> where T : CommonEntity
{
  /*Load all the entities for the list*/
  List<T> LoadEntities();

  /*Load the single selected entity by its ID*/
  T LoadSingleEntity(String ID)
}

/*Common Entity to inherit*/
public class CommonEntity
{
  private String _entityID;
  private String _entityName;

  /*Unique ID of the entity*/
  public String ID 
  {
    get { return(_entityID);}
    set { _entityID = value;}
  }

  /*Entity Name*/
  public String Name
  {
    get { return(_entityName); }
    set { _entityName = value; }
  }
}

public EntityComboBox<T> where T : CommonEntity
{
    private comboBox FillCombobox(EntityLoader<T> dataLayer)
    {
            comboBox comboBox = new comboBox();
            List<EntityType> EntityList = dataLayer.LoadEntities();
            DataTable dt = new DataTable();
            dt.Columns.Add("id");
            dt.Columns.Add("Name");
            dt.Rows.Add(-1, "Choose one option");
            foreach (EntityType Entity in EntityList)
            {
                dt.Rows.Add(Entity.ID, Entity.Name);
            }
            comboBox.ValueMember = dt.Columns[0].ColumnName;
            comboBox.DisplayMember = dt.Columns[1].ColumnName;
            comboBox.DataSource = dt;
            return combobox;
    }
}
...