1

我有一些代表数据库表的类(实体)

public class ALBUM
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Tracks { get; set; }
}
public class BOOK
{
    public int Id { get; set; }
    public string Author { get, set; }
}

然后获取各个存储过程的参数,插入,更新,任何

public Command getParameters(string spName, dynamic entity, Connection conn)
{
   Command cmd = conn.CreateCommand();
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.CommandText = spName;

   // Get properties (fields) from entity (table)
   PropertyInfo[] properties = entity.GetType().GetProperties();

   for (int = 0; i < properties.Length; i++)
   {
       // here I set Parameters: name, DBType, and Value from properties
   }
}

现在我打电话

public void Some()
{
   ALBUM someAlbum = new ALBUM();
   BOOK anyBook = new BOOK();      // all respective data from DB is set

   Command newCommand = getParameters("myAlbumSP", someAlbum, myConnection);
   Command newCommand = getParameters("mySPBooks", anyBook, myConnection);
}

我如何定义“实体”参数?,不是动态的。
它有效,只是我正在寻找其他方法来做到这一点,我相信有很多。

4

2 回答 2

2

在您的情况下,不需要entity(尽管肯定可以)。使用代替就足够了,因为你不会调用任何给你的东西之外的东西。这有效,因为您使用反射。另一方面,使用 ,您可以指定在 上找不到的属性,编译器不会抱怨。dynamicobjectobjectdynamicobject

例如,由于ALBUMBOOK都有一个Id参数,你可以这样写:

var entityId = entity.Id;

只要entity是,这将起作用dynamic;它不适用于object.

于 2013-03-16T00:27:00.893 回答
0

您可以使用ExpandoObject类。正如保罗·萨西克所说:

Expando 是一种动态类型,旨在通过在运行时添加/删除成员来处理动态数据。dynamic 旨在允许 .NET 在与 Python 和 JavaScript 等动态类型语言交互时与类型进行互操作。

https://stackoverflow.com/a/3540291/322848

这是一篇解释ExpandoObject的文章:

http://blogs.msdn.com/b/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx

于 2013-03-16T02:11:25.517 回答