理解cite类标记,如SQLite

时间:2017-08-21 17:41:56

标签: c# sqlite

使用SQLite库,我可以创建一个类

namespace MyApp
{
    [Table("mydatatable")]
    public class MyData
    {
        [PrimaryKey, AutoIncrement, Column("_id")]
        public int ID { get; set; }

        [Unique, NotNull]
        public Guid GUID { get; set; }

        [MaxLength(256), NotNull]
        public string Name { get; set; }

        [NotNull]
        public DateTime Created { get; set; }

        public int MyNumber { get; set; }
    }
}

然后我可以创建一个像

这样的数据库类
namespace MyApp
{
    public class SQLiteDatabase
    {
        protected SQLiteConnection conn;

        public SQLiteDatabase()
        {
        }

        public void Attach(string dbName)
        {
            conn = new SQLiteConnection(dbName);
        }

        public void CreateTable<T>()
        {
            conn.CreateTable<T>();
        }

        public int Insert(Object T)
        {
            return conn.Insert(T);
        }
    }
}

这一切都很精彩,使得使用SQLite非常容易。但是,如何编写自己的代码来做一些与众不同的事情呢?例如,不是将数据写入SQLite数据库,而是说我想转换MyApp实例并通过nework发送它。

namespace MyApp
{
    public class MyDatabaseHandler
    {
        public void CreateTable<T>()
        {
            // How do I get the table name "mydatatable"?
            // How do I get the column names and types?
            // Once I get that information, I can send a POST to my server and create a table on the backend
        }

        public int Insert(Object T)
        {
            // How do I get the table name "mydatatable"?
            // How do I get the column names and values of each data member?
            // Once I get that information, I can send a POST to my server and insert the record.
        }
    }
}

2 个答案:

答案 0 :(得分:0)

https://msdn.microsoft.com/en-us/library/ms973893.aspx?f=255&MSPPError=-2147217396

查看.Net中的序列化

您可以将类转换为XML文件,然后通过网络传递XML文件,并将它们加载到您的班级的新位置。

此外,您可以考虑使用TCP,但无论您是否需要将数据转换为某种类型的序列化类。

答案 1 :(得分:0)

我认为你需要使用反射。试试这段代码:

public class MyDatabaseHandler
{
    public void CreateTable<T>()
    {
        // How do I get the table name "mydatatable"?
        var type = typeof(T);
        var tableAttribute = (TableAttribute)type.GetCustomAttributes(typeof(TableAttribute), inherit: false).FirstOrDefault();
        var tableName = tableAttribute?.Name;


        // How do I get the column names and types?
        var columns = type.GetProperties()
            .Select(p => new {type = p.PropertyType, name = p.Name })
            .ToArray();
    }

    public int Insert(Object T)
    {
        var type = T.GetType();
        // see previous method
    }
}