gpt4 book ai didi

c# - 如何从 C# 中的 SQL 查询结果填充类?

转载 作者:可可西里 更新时间:2023-11-01 08:32:30 25 4
gpt4 key购买 nike

我有这样一个类:

public class Product
{
public int ProductId { get; private set; }
public int SupplierId { get; private set; }

public string Name { get; private set; }
public decimal Price { get; private set; }
public int Stock { get; private set; }
public int PendingStock { get; private set; }
}

我可以像这样从我的数据库中获取这些详细信息:

SELECT product_id, supplier_id, name, price, total_stock, pending_stock 
FROM products
WHERE product_id = ?

我不想手动运行 DataSetDataTable 来设置值。

我确信有一种方法可以使用某种绑定(bind)/映射机制来填充类,但我能找到的唯一东西是绑定(bind)到 winforms 组件或使用 XAML。

是否有某种属性可以应用于我的属性/类,以便从查询行自动填充该类?

最佳答案

我决定提出另一个答案,它实际上是对 Alex 提供的答案的扩展(所有功劳都归功于他),但它为了列名 2 属性名映射而引入了属性。

首先需要自定义属性来保存列名:

[AttributeUsage(AttributeTargets.Property, Inherited = true)]
[Serializable]
public class MappingAttribute : Attribute
{
public string ColumnName = null;
}

该属性必须应用于要从数据库行填充的类的那些属性:

public class Product
{
[Mapping(ColumnName = "product_id")]
public int ProductId { get; private set; }

[Mapping(ColumnName = "supplier_id")]
public int SupplierId { get; private set; }

[Mapping(ColumnName = "name")]
public string Name { get; private set; }
[Mapping(ColumnName = "price")]
public decimal Price { get; private set; }
[Mapping(ColumnName = "total_stock")]
public int Stock { get; private set; }
[Mapping(ColumnName = "pending_stock")]
public int PendingStock { get; private set; }
}

其余的按照 Alex 的建议进行,除了该属性用于检索列名:

T MapToClass<T>(SqlDataReader reader) where T : class
{
T returnedObject = Activator.CreateInstance<T>();
PropertyInfo[] modelProperties = returnedObject.GetType().GetProperties();
for (int i = 0; i < modelProperties.Length; i++)
{
MappingAttribute[] attributes = modelProperties[i].GetCustomAttributes<MappingAttribute>(true).ToArray();

if (attributes.Length > 0 && attributes[0].ColumnName != null)
modelProperties[i].SetValue(returnedObject, Convert.ChangeType(reader[attributes[0].ColumnName], modelProperties[i].PropertyType), null);
}
return returnedObject;
}

关于c# - 如何从 C# 中的 SQL 查询结果填充类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com