Пользовательские POCO-объекты к таблице - PullRequest
0 голосов
/ 25 марта 2012

В настоящее время я использовал унаследованные классы DbContext-Classes, содержащие члены DbSet , для хранения объектов POCO в базе данных. Это прекрасно работает для классов, известных во время компиляции, и их структур.

Теперь у меня есть класс, как

public class ResourceSet
{
    public long Id
    {
        get;
        set;

    }
    public long OwnerId
    {
        get;
        set;
    }

    public double[] Resources
    {
        get;
        set;
    }
}

и хотел бы сохранить его в схеме базы данных:

Id, OwnerId, Res_1, Res_2, Res_3, ... (в зависимости от размера ресурсов, который будет исправлен при запуске программы).

  • В настоящее время я использую CTP5 из EFCodeFirst
  • DbSet не работает, конечно. Он не поддерживает индексированные свойства.
  • Я бы хотел избежать файлов .edmx

Мой вопрос:

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

LINQ для поиска в 'Id' и 'OwnerId' должен быть по-прежнему возможен, для ресурсов это не требуется.

1 Ответ

2 голосов
/ 25 марта 2012

Если Resources никогда не требуется в запросе Linq, вы можете сопоставить его со свойством поддержки строк, а затем сохранить его обратно в базе данных.

public double[] Resources
{
    get
    {
        var result = from r in ResourceString.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries)
                     select double.Parse(r);

        return result.ToArray();
    }
    set
    {

        ResourceString = string.Empty;
        foreach (var d in value)
        {
            ResourceString += d + ";";
        }
    }
}

private string ResourceString
{
    get;
    set;
}

Если вы обновите свою Entity Framework до последней версииверсия (через NuGet) и указать ресурсы как не сопоставленные все должно работать.

...