Subsonic - может ли кто-нибудь предоставить пример использования Subsonic SimpleRepository для сохранения списка / массива объектов?

Я ищу возможные способы сохранить следующие классы. Subsonic SimpleRepository похоже, что он может работать, и люди сказали, что это должно быть, когда я спросил более общий вопрос.

Но мне не удалось найти ни одного примера, как это сделать - или хотя бы одного, который я мог бы понять.

Может ли кто-нибудь указать мне на пример или рассказать, как я могу использовать Subsonic для сопоставления следующих классов с базой данных?

Обратите внимание, что я не проектировал базу данных - Я надеюсь, что Subsonic сделает это за меня, ленивый я ...

Изменить: просто чтобы расширить предыдущий пункт - я надеюсь, что Subsonic преобразовал мою объектную модель в реляционную БД, имея дело со всеми связями родитель-ребенок и один-ко-многим, которые подразумеваются. . В настоящее время я не думаю, что Subsonic может это сделать. Но даже рабочий пример (не фрагмент кода), который явно управляет внешними ключами и т. Д. В объектной модели, был бы полезен.

Немного предыстории и заметок о классах, которые я хочу сохранить:

  • они используются программным обеспечением, управляющим некоторым измерительным оборудованием.
  • класс Data содержит массив объектов RunData под названием RunFn, в котором хранятся данные до 10 отдельных запусков измерений.
  • обратите внимание, что RunData также содержит массив чисел с плавающей запятой - RawY
  • при необходимости мы можем изменить массивы на какой-либо другой тип коллекции (List ‹> и т. д.)
  • разработка на C #, VS2008, для SQL Server Express

Изменить: я использую Subsonic 3.0.0.3.

public class RunData

{
    public DateTime StartDateTime { get; set; }
    public TimeSpan ElapsedTime { get; set; }

    private float[] _rawY;
    public float[] RawY
    {
        get
        {
            return _rawY;
        }
        set
        {
            _rawY = value;
        }
     }
 }

public Data
{
    public string OperatorId { get; set; }
    public string SampleId { get; set; }

    // CAN SUBSONIC DEAL WITH THIS ARRAY OF OBJECTS???
    private RunData[] _runFn;
    public RunData[] RunFn
    {
        get
        {
            return _runFn;
        }
        set
        {
            _runFn = value;
        }
    }
}

person Tom Bushell    schedule 22.10.2009    source источник


Ответы (2)


Я не уверен, что отвечу на все, что вы здесь спрашиваете, но если бы я реализовывал это с помощью SimpleRepository, у меня были бы следующие модели:

public class RawYValue
{
  public int Id { get; set; }
  public int RunDatumId { get; set; }
  public float YValue { get; set; }
}

public class RunDatum
{
   var repo = new SimpleRepository();

   public int Id { get; set; }
   public int DataId { get; set; }
   public DateTime StartDateTime { get; set; }
   public TimeSpan ElapsedTime { get; set; }

   public IQueryable<RawYValue> RawYValues 
   { 
     get { return repo.Find<RawYValue>(rawYValue => rawYValue.RunDatumId == Id); }
   }
 }

public Data
{       
  var repo = new SimpleRepository();

  public int Id { get; set; }
  public string OperatorId { get; set; }
  public string SampleId { get; set; }

  // CAN SUBSONIC DEAL WITH THIS ARRAY OF OBJECTS???
  public IQueryable<RunDatum> RunData 
  { 
     get { return repo.Find<RunDatum>(runDatum => runDatum.DataId == Id); }
  }
}

Я полагаю, что SubSonic будет иметь проблемы с множественным числом некоторых имен, поэтому вам может потребоваться их изменить, но, надеюсь, это поможет вам начать работу.

person Adam Cooper    schedule 25.10.2009
comment
+1 - Спасибо, Адам - ​​именно то, что я искал. Я попробую это сделать на следующий день или около того и отмечу ваш ответ как принятый, если все в порядке. - person Tom Bushell; 26.10.2009
comment
Я попробовал это, и Subsonic создал таблицу для класса Data, но просто проигнорировал список RunData. Затем я изменил класс Data, чтобы он имел одно свойство RunDatum, но это тоже не сработало. Единственное, что до сих пор работало, - это сделать repository.Add (RunDatum), который создал другую таблицу, не имеющую отношения к первой таблице. Я надеялся, что Subsonic будет перемещаться по всей иерархии классов и строить из нее схему базы данных. - person Tom Bushell; 27.10.2009
comment
Кстати, плюрализация, похоже, отлично работала с моими оригинальными именами. Кроме того, я использую Subsonic 3.0.0.3, если это имеет значение. - person Tom Bushell; 27.10.2009
comment
Вам нужно будет указать SubSonic запускать миграции, создав экземпляр SimpleRepository и передав SimpleRepositoryOptions.RunMigrations в конструктор. Вы смотрели документы? subsonicproject.com/docs/Using_SimpleRepository - person Adam Cooper; 27.10.2009
comment
Ага, делаю это. С тех пор я нашел несколько SO-вопросов (включая некоторые из ваших), в которых говорится, что автоматическая генерация схемы НЕ возможна с текущей версией Subsonic, но Роб работает над этим, например. stackoverflow.com/ вопросы / 1114691 /. У большинства из них в заголовках было «один ко многим», «родитель-ребенок» и т. Д. - person Tom Bushell; 27.10.2009
comment
Исправление - означает включение некоторых вопросов, на которые вы ответили в предыдущем комментарии. - person Tom Bushell; 27.10.2009
comment
Да, извините, я не очень часто использую SimpleRepository, поэтому я не был уверен, сможет ли RunMigrations перемещаться по всей иерархии. - person Adam Cooper; 28.10.2009
comment
К сожалению, ваш ответ подразумевал, что вы знали, о чем говорите, и я потратил некоторое время, пытаясь заставить это работать. Пожалуйста, удалите его - у меня нет представителя, который мог бы это сделать сам. Спасибо. - person Tom Bushell; 28.10.2009
comment
Я обновил свой пример, чтобы убедиться, что база данных будет сгенерирована с идентификаторами сторонних объектов и отношения будут работать. - person Adam Cooper; 15.01.2010

Чтобы ответить на мой собственный вопрос ...

Несмотря на некоторые другие сообщения, которые я обнаружил, которые подразумевают, что Subsonic SimpleRepository может автоматически генерировать реляционную схему из объектной модели, оказывается, что это НЕ так. См. Ответ Роба Конери на этот вопрос:

Relations-and-lazy-loading-in-subsonic-3-0 < / а>

Однако он работает над этим, и, вероятно, ожидание того стоит.

А пока я посмотрел на Fluent NHibernate, и он сразу же делает то, что мне нужно. В их загрузке исходного кода есть демонстрационный проект под названием Examples.FirstProject, который демонстрирует функциональность, которую я ищу. Их документация также кажется намного более зрелой.

Однако NHibernate в целом выглядит более сложным, поэтому будет интересно посмотреть, что будет развиваться с Subsonic.

Изменить: Вот полезная ссылка, которая показывает, как самостоятельно управлять внешними ключами в SimpleRepository -

subsonic-3-simplerepository

Сам не пробовал, но похоже, что это действительно сработает.

person Tom Bushell    schedule 27.10.2009
comment
SubSonic сгенерирует для вас модель базы данных с помощью SimpleRepository, но вам необходимо перенести каждую таблицу. Этот вопрос говорит о глубокой экономии. - person Adam Cooper; 28.10.2009
comment
@Adam - я думаю, правильнее будет сказать, что SimpleRepository автоматически создаст и перенесет отдельные таблицы за вас, но вам нужно самостоятельно управлять отношениями в своей объектной модели. Если я ошибаюсь, опубликуйте полный рабочий пример, который кто-нибудь может вставить в Visual Studio и иметь разумные шансы на его работу. - person Tom Bushell; 28.10.2009
comment
@Tom - Мне было бы интересно узнать, как Fluent NHibernate сработал для вас в этом сценарии? Я столкнулся с той же проблемой с SimpleRespository, поэтому думаю, что стоит посмотреть. - person Alex; 26.11.2009
comment
@Alex - Я добился определенных успехов с Fluent NHibernate - поищите тег Automapping для некоторых из моих опытов. Функциональность Automapping в основном работает, создавая реляционную БД из объектной модели. Очень гибкий и мощный. С другой стороны, он намного сложнее, чем Subsonic, а документации и рабочих примеров мало. Но я получил помощь от первоначальных авторов и продолжаю использовать ее в своем проекте. Насколько я могу судить, это единственная игра в городе, если вам нужно настоящее автоматическое отображение достаточно сложных объектов. - person Tom Bushell; 30.11.2009