将c#中的任意复杂对象存储到数据库中

时间:2014-05-29 21:56:47

标签: c# entity-framework

我目前正在为多个API编程。到目前为止,我已经创建了使用EF语法(id = classNameId etc ...)的类,并将正在返回的任何项目转换为EF对象。由于我使用C#Wrappers(由任何创建API的公司创建)用于API,我不能简单地改变我想要存储到数据库的任何类以使用EF语法。是否有任何项目允许我使用运行时反射动态生成任何通用对象的表和列?

请记住,许多复杂的对象都包含复杂的对象。

到目前为止,我正在考虑编写一个脚本来为每个复杂类型(通过反射识别)生成继承类,并将Id(以及EF需要生成DB的其他信息)插入到继承中类。这会有点复杂,因为它需要对Ienumerable进行隐式转换。

非常感谢任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:2)

您实际需要的是一些无模式数据库,如MongoDB或RavenDb而不是关系数据库。这些允许完全按照您在标题中所说的内容执行:在db中存储任意复杂对象。

答案 1 :(得分:1)

您可能需要查看OrmLite,看看它是否符合您的要求。

public class SimpleExample
{
        public int Id { get; set; }
        public string Name { get; set; }
}

//Set once before use (i.e. in a static constructor).
OrmLiteConfig.DialectProvider = new SqliteOrmLiteDialectProvider();

using (IDbConnection db = "/path/to/db.sqlite".OpenDbConnection())
using (IDbCommand dbConn = db.CreateCommand())
{
        dbConn.CreateTable<SimpleExample>(true);
        dbConn.Insert(new SimpleExample { Id=1, Name="Hello, World!"});
        var rows = dbConn.Select<SimpleExample>();

        Assert.That(rows, Has.Count(1));
        Assert.That(rows[0].Id, Is.EqualTo(1));
}