在C#中将对象,结构或数组插入MySQL表

时间:2011-12-11 18:39:53

标签: c# mysql database mono

有没有办法简化数据插入到MySQL表中,利用对象,结构或数组,而不是用列出的十几个字段编写长SQL查询?

说,我有一个简单的类(或结构)对象,如下所示:

public class UserRecord
{
    public int id;
    public string first_name;
    public string last_name;
    public int age;

    // constructor, destructor, etc.
    ...
}

是否可以使用标准C#库来实现以下功能:

...
UserRecord user1 = new UserRecord("Hunter", "Thompson", 67);
database.Insert(user1);
...

而不是像:

...
cmd.CommandText = "INSERT INTO Users (... ...);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@first_name", user1.first_name);
cmd.Parameters.AddWithValue("@last_name", user1.last_name);
cmd.Parameters.AddWithValue("@age", user1.age);
...

3 个答案:

答案 0 :(得分:3)

您正在寻找OR / M.由于您正在寻找支持Mono的解决方案,请检查 NHibernate ,这是Microsoft .NET Framework开源领域中最好的OR / M之一:

如果您想了解更多关于什么是OR / M的信息:

答案 1 :(得分:2)

我终于想出了PetaPoco library。 “micro-ORM”库结果非常轻巧,易于使用。我发现NHibernate对于我这样的小应用来说非常臃肿。

以下是我用来管理UserRecords的代码示例:

[PetaPoco.TableName("le_users")]
[PetaPoco.PrimaryKey("id")]
public class UserRecord
{
    public int id { get; set; }
    public string first_name { get; set; }
    public string last_name { get; set; }
    public int age { get; set; }
}

...

// Create a PetaPoco database object
PetaPoco.Database db = new PetaPoco.Database(dbconnection);

// Insert a record
UserRecord rec = new UserRecord();
rec.first_name = "Hunter";
rec.last_name = "Thompson";
db.Insert(rec);

感谢所有向我指出ORM方向的人!

答案 2 :(得分:1)

如果你不采用OR / M方式,你可以使用反射作为T,但如果T包含与你的表记录无关的属性,你还必须使用自定义属性。