Какой SQL ORM можно использовать для замены этого старого кода - PullRequest
0 голосов
/ 02 марта 2010

Извините, поскольку этот вопрос относится к моей проблеме.

Во время изучения размышлений я сделал мини-SQL ORM за неделю, а затем незначительные изменения, используя его еще неделю. Поскольку в него вложено очень мало работы, его совместимость только с sqlite. До сих пор у меня не было проблем с кодом, но я хотел бы перенести его на что-нибудь, поддерживающее TSQL или MySql.

Здесь приведен пример кода , который устарел, но в моем классе используются наиболее часто используемые функции. Какую библиотеку я могу портировать этот код слишком малой боли. Обратите внимание, что он должен поддерживать внешние ключи.

Ответы [ 3 ]

10 голосов
/ 02 марта 2010

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

Справочная документация NHibernate предлагает 30 минут для запуска и запуска примера из вводной главы.

Мой собственный короткий список ORM будет:

  • NHibernate
  • Linq 2 SQL

Некоторые связанные вопросы:

Пример NHibernate

// create and save an entity
var u = new User{ Name="foo", SignupDate=DateTime.Now };
session.Save( u );

// fetch and update entity, saving a related entity
var post = session.Get<Post>( 42 );
post.Tags["foo"].Count++;
session.Save( post );

// save a related item for an entity
post.Tags.Add( new Tag("Name")); 
session.Save( post );

Некоторые примеры отображений и классов:

public class User
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual DateTime SignupDate { get; set; }
}

public class Post
{
    public virtual int Id { get; set; }
    public virtual User User { get; set; }
    public virtual string Title { get; set; }
    public virtual string Body { get; set; }
    public virtual IList<Tag> Tags { get; set; }
}

public class Tag
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Count { get; set; }
}

<class name="User" table="user">
  <id name="Id">
    <generator class="native" />
  </id>
  <property name="Name" />
  <property name="SignupDate" />
</class>

<class name="Post" table="post">
  <id name="Id">
    <generator class="native" />
  </id>
  <property name="Title" />
  <property name="Body" type="StringCLob" /> <!-- ntext -->
  <many-to-one name="User" />
  <bag name="Tags" table="post_tag" cascade="save-update">
      <key column="postid" />
      <many-to-many class="Tag" column="tagid" />
  </bag>
</class>

<class name="Tag" table="tag">
  <id name="Id">
    <generator class="native" />
  </id>
  <property name="Name" />
  <property name="Count" />
</class>
2 голосов
/ 09 марта 2010

Для такой простой модели данных я хотел бы использовать Linq 2 Sql или SubSonic с наклоном к SubSonic.

Я использовал Lightspeed 2, но не новую версию 3. Так что Lightspeed 3 также может быть хорошим выбором. Для нашего проекта Lightspeed мы также рассмотрели шесть или семь других ORM, включая nHibernate. Lightspeed был вторым по скорости. Самый быстрый ORM создал несколько действительно классных моделей!

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

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

1 голос
/ 05 марта 2010

Mindscape Lightspeed имеет большинство общих вещей из NHibernate и EntityFramework и может работать из POCO

Поддерживает SQL Server, MySQL и многие другие

Множество образцов, учебных пособий, быстрой дружественной и личной помощи

Microsoft даже наняла одного из своих дизайнеров для работы над EntityFramework

Попробуй потом

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