C# 在C中向MySQL表中插入对象、结构或数组#

C# 在C中向MySQL表中插入对象、结构或数组#,c#,mysql,database,mono,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. ... }

有没有办法简化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);
...

您正在寻找OR/M。既然您正在寻找支持Mono的解决方案,请选中NHibernate,它是Microsoft.NET Framework开源领域中最好的OR/M之一:

如果您想进一步了解什么是OR/M:


您正在寻找OR/M。既然您正在寻找支持单声道的解决方案,请选中Microsoft.NET Framework开源领域中最好的OR/M之一 ;NHibernate

如果您想进一步了解什么是OR/M:


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

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

我终于想到了。“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);

感谢所有为我指明方向的人

我终于想出了答案。“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工具吗?@Marc,没有。我想要一种“非自动”的“解决方案。我想知道是否可以从一些数据库相关的类中派生出来。@ezpresso请检查我的答案。不可能。没有神奇的类可以将关系数据库访问转换为面向对象的访问。嗯,没有这样的类:有OR/M概念。这是一条路,不要试图重新发明轮子。你试过了吗有没有可用的ORM工具?@Marc,没有。我想要一种“非自动”的“解决方案。我想知道是否可以从一些数据库相关的类中派生出来。@ezpresso请检查我的答案。不可能。没有神奇的类可以将关系数据库访问转换为面向对象的访问。嗯,没有这样的类:有OR/M概念。这是一条路,不要试图重新发明轮子。这样你就可以你是对的。但是ORM只是一种选择,而不是一种义务。至于轮子的重新发明,我相信你已经看到了很多方轮子。是的,绝对的,这是痛苦的,你知道;)这就是为什么我更倾向于认为没有人应该创建自己的OR/M,因为现有的已经成熟足够了,他们已经证明了质量、功能集和支持。这样你就可以重新发明轮子,创建一个新的弱或/M。你是对的。但ORM只是一个选项,而不是一个义务。至于轮子的重新发明,一般来说,我相信你已经看到了很多方轮子。是的,当然,这是痛苦的,你知道;)这就是为什么我更喜欢争论的是,没有人应该创建自己的OR/M,因为现有的OR/M已经足够成熟,并且已经证明了质量、功能集和支持。