我可以用什么SQL ORM来替换这个旧代码

时间:2010-03-02 09:17:27

标签: c# sql orm

很抱歉,因为这个问题特定于我的问题。

在学习反思的同时,我在一周内完成了一个迷你SQL ORM,然后在使用它一周时进行了轻微的调整。由于它只有很少的工作量,它实际上只与sqlite兼容。到目前为止,我还没有遇到过代码问题,但我想把它移植到支持TSQL或MySql的东西。

The example code is here已过时但在我班级中使用最多的功能。什么库我可以用最小的痛苦来移植那些代码。请注意,它必须支持外键。

3 个答案:

答案 0 :(得分:10)

我的建议是查看一些ORM的教程,然后选择最适合你的那些。

NHibernate reference documentation建议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>

答案 1 :(得分:2)

对于这样一个简单的数据模型,我会看看使用Linq 2 Sql或SubSonic,倾向于SubSonic。

我使用过Lightspeed 2,但没有使用新版本3.所以Lightspeed 3也是不错的选择。对于我们的Lightspeed项目,我们还查看了其他六个或七个ORM,包括nHibernate。 Lightspeed是第二快的。最快的ORM产生了一些非常时髦的模型!

提到的任何一个ORM加上未提及的ORM都将完成这项工作。我认为这将归结为您希望为对象建模所花费的精力以及您的个人偏好。

我更喜欢SubSonic,因为您只需在T4模板中设置三个变量并放入文件夹即可。所有代码都会自动生成。如果需要,您也可以根据自己的喜好调整模板。

答案 2 :(得分:1)

Mindscape Lightspeed包含来自NHibernate和EntityFramework的大多数常见内容,可以在POCO中使用

支持SQL Server,MySQL和许多其他

大量的样本,教程,快速友好和个人帮助

微软甚至聘请其中一位设计师来处理EntityFramework

然后尝试