我有一个代码
Page.cs
public class Page
{
public Guid Id { get; set; }
public String Title { get; set; }
public String SubTitle { get; set; }
public String Slug { get; set; }
public String Content { get; set; }
public Int16 Status { get; set; }
public Int16 Visibility { get; set; }
public Guid? ParentId { get; set; }
public int Order { get; set; }
public byte[] FeaturedImage { get; set; }
public Guid CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
public Guid ModifiedBy { get; set; }
public DateTime ModifiedAt { get; set; }
}
Other.cs
Some.Insert(new Page
{
Id = Guid.NewGuid(),
Title = "Glass",
SubTitle = "",
Slug = "glass",
Content = "content",
Status = 1,
Visibility = 1,
ParentId = Guid.NewGuid(),
Order = 1,
FeaturedImage = null,
CreatedBy = Guid.NewGuid(),
CreatedAt = DateTime.Now,
ModifiedBy = Guid.NewGuid(),
ModifiedAt = DateTime.Now
});
Some.cs
public static void Insert(Object insertObject)
{
Type myType = insertObject.GetType();
IList < PropertyInfo > props = new List < PropertyInfo > (myType.GetProperties());
foreach(PropertyInfo prop in props)
{
Object val = prop.GetValue(insertObject, null);
if (prop.PropertyType.Name == "Byte[]")
{
values.Add(new SqlParameter(prop.Name, Convert.ToByte(val)));
}
else
values.Add(new SqlParameter(prop.Name, val));
}
}
我的代码显示,我硬编码检查每个propertyType和名称,然后转换它。它真的很累,如何正确地将对象转换为原始数据类型。
我想要实现的是动态创建数据访问对象。 我上传图片时总是出错,转换为byte [],最后我得到一个错误,不能将字符串转换为varbinary(max)。 这就是我添加的原因:
if (prop.PropertyType.Name == "Byte[]")
{
values.Add(new SqlParameter(prop.Name, Convert.ToByte(val)));
}
我认为这不是一个解决方案,这就是我问正确方法的原因。
答案 0 :(得分:0)
我不确定您要尝试实现的目标,但您可以将Insert
方法替换为:
public static void Insert(object insertObject)
{
var convertedObject = Convert.ChangeType(insertObject, insertObject.GetType());
}