一个实体,有很多种属性,需要保存实体入数据库。
定义了一个class,但保存的时候不保存的全是class名。查了一下,似乎是需要序列化,想问一下怎么做。
或者用什么其它办法来解决,也想过,把这个实体,变成个xml字段来保存,但同样不知道怎么来做。大家给点实例吧。
定义了一个class,但保存的时候不保存的全是class名。查了一下,似乎是需要序列化,想问一下怎么做。
或者用什么其它办法来解决,也想过,把这个实体,变成个xml字段来保存,但同样不知道怎么来做。大家给点实例吧。
解决方案 »
- 学校有教asp的课,但没有教asp.net的课,是不是不应该浪费时间学asp
- 文本框限制中文輸入問題
- VS中所有的图片都变形了?为什么啊?
- 求一份Asp.Net规范
- 控件里面再放一个image控件id=image1 怎么在后台找不着image1这个名字呢?怎样才能找找呢?
- AjaxControlToolkit控件
- 如何使用updateprogress控件,实现下载功能。
- 请问:关于使用Response.AddHeader下载文件方式能否支持批量下载?
- 动态添加控件的问题!高手们快来帮忙啊!!!
- 请大家为我推荐一本 ASP.NET 的入门书好吗? (来者有分)
- 请问如果在asp.net页面中操作googlemap
- 数据采集,正则表达式匹配问题
怎么不能保存 什么叫保存的时候不保存的全是class名
mycla.a=xxx
mycla.b=xxxsql语句中,string aa="insert into xxx (mycla)values('"+mycla+"')"
运行状态下,看
? aa
里面看到的values('myclass')这样了。也就是说,注入进去的值,并不是mycla这个对象
我这个项目中,属于一个计算类型,一个工程方案,录入的参数有90来个,然后通过参数计算,得出其它结果,而对这些值,确实是不需要在数据库中来操作,这也就是我考虑做为一个实体来存放的原因。对于我前面描述问题的不准确性,也是一时马虎了。后面在五楼,我细化描述了一下,现在在看二楼提供的方法,不过还是很多不理解的地方。。今年三月刚刚开始学的.net,而且也没有系列性的学,都是用到什么就对什么去深入了解。难免会有些很奇怪的问题吧,呵呵。
using System.Reflection;namespace ConsoleApplication1
{
class Program
{
static void Main()
{
var a = new A { field1 = "小竹", property1 = 1234, property2 = 7890 };
var b = new A();
foreach (FieldInfo info in a.GetType().GetFields(System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic))
{
object value = info.GetValue(a);
Console.WriteLine("field {0} => {1}", info.Name, info.GetValue(a));
info.SetValue(b, value);
}
Console.WriteLine();
Console.WriteLine("b.prperty1={0}, b.2roperty2={1}", b.property1, b.property2);
Console.ReadKey();
} public class A
{
public string field1; public long property1 { get; set; } private uint _p2; public uint property2
{
get
{
return _p2;
}
set
{
_p2 = value;
}
}
}
}
}
运行它,你会发现a中所有private的field都可以自动被反射出值,并且可以正确装到b中,并且b的两个属性返回的值也是正确的。这就说明你无需采集property值,数据库中只需要保存最原始的field值就够了。真实的程序中,不会去向这样每一次采集对象字段值时去反射。只需要反射一次,然后把FieldInfo集合存起来反复使用就可以了。真实的ORM程序,根据你的目标数据库的不同,你自己翻译为原生数据的操作。例如翻译为SQL Server的t-sql语句。那是你自己的设计事情。这个程序只是告诉你如何反射对象的有用信息(然后你就可以把各个字段的value写入数据库),并且如何把(从数据库中读出的每个字段的value)信息再写到对象中。
实际上设计一个ORM可能还涉及到当一个对象的field是引用另外类型时,如何映射到数据库的外键关联的其它表中。以及自动处理对象唯一ID(例如你可以判断对象是否有一个你自定义的 IRequireIDField接口,如果有你就可以在insert时为它自动填写ID)。对于关系数据库,还要自动通过反射的FieldInfo来自动创建数据库表,通过反射Field上的Attribute标签来自动创建索引。编程时经常会扩展class定义,所以当用户新增了字段,你的程序第一次反射一个类型时就可以自动去更新数据库定义,增加新的字段以及默认值。当遇到一个field是引用类型时,还要自动创建关联子表,并且自动创建外键。等等。不过你在问题中都没有问及这些。实际上假设你仅仅使用非常简单类型的字段定义,那么能够简单地反射field、GetValue和SetValue,这是最基本的知识了。