EF4.1 Как отобразить список свойств из разных таблиц - PullRequest
1 голос
/ 10 февраля 2012

Предположим, у нас есть следующий класс:

public class MyEntity
{
   public Guid Id { get; set; }
   public int EntityType { get; set; }
   public List<integer> DataValues { get; set; }
}

Структура таблицы выглядит следующим образом:

MyEntity
Id uniqueidentifier

Я хочу сохранить значения для DataValues ​​в разных таблицах в зависимости от EntityType. Так, например, MyEntity1 будет иметь два целочисленных поля, а MyEntity2 может иметь три целочисленных поля.

MyEntity1
EntityId (FK to MyEntity)
Integer1 int
Integer2 int

MyEntity2
EntityId (FK to MyEntity)
Integer1 int
Integer2 int
Integer3 int

Так что, если у меня есть экземпляр типа «MyEntity1», мои таблицы будут иметь следующие значения:

MyEntity
Id          EntityType
---------------------
someguid1     1

MyEntity1
EntityId  Integer1   Integer2
------------------------------
someguid1 100         200

Во время выполнения другой класс, скажем, MyEntityDefinition хранит, сколько целых чисел хранит сущность, обращаясь к этому классу, я могу знать, что если сущность имеет тип MyEntity1, то она содержит два целочисленных значения.

Я бы хотел сопоставить эту структуру таблицы с классом MyEntity, есть ли возможные способы сделать это?

PS: я не хочу определять классы MyEntity1, MyEntity2. Я просто хочу использовать структуру таблицы (MyEntity, MyEntity1, MyEntity2) для хранения данных.

В основном я оценивал сценарии EF 4.1 в тех случаях, когда определения сущностей не являются фиксированными и могут обновляться пользователями. Информация (метаданные) об объектах хранится в других таблицах

1 Ответ

0 голосов
/ 10 февраля 2012

Не уверен, если это возможно, но как насчет этого:

public class MyEntity
{
   public Guid Id { get; set; }
   public int EntityType { get; set; }

   public static List<int> DataValues(MyEntity obj)
   {
      if (obj.EntityType == 1)
      {
         MyEntity1 e1 = (MyEntity1)obj;
         // TODO: return list of integers from e1
      }
   }
}


public class MyEntity1 : MyEntity
{
  public int Integer1 {get;set;}
  public int Integer2 {get;set;}
}
...