C# 用c语言将任意复杂对象存储到数据库

C# 用c语言将任意复杂对象存储到数据库,c#,entity-framework,C#,Entity Framework,我目前正在为多个API编程。到目前为止,我已经创建了使用EF语法id=classNameId等的类。。。并将返回的任何项转换为EF对象。因为我使用的是由为API创建API的任何公司创建的C包装器,所以我不能简单地更改我要存储到数据库中的任何类以使用EF语法。是否有任何项目允许我使用运行时反射为任何通用对象动态生成表和列 请记住,许多复杂对象中都包含复杂对象 目前,我正在考虑编写一个脚本,为通过反射识别的每个复杂类型生成继承类,并插入一个Id以及EF需要在继承类中生成DB的任何其他信息。这将变得有

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

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

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

任何帮助都将不胜感激


谢谢。

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

您可能需要查看它是否满足您的要求

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));
}

谢谢你的建议。我真的很想呆在关系数据库中。我遇到的问题是复杂对象和子对象缺少id字段。我正在寻找一种方法,将该字段简单地放在EF的继承类中,以便于存储。根据我对MongoDb的了解,它是在幕后为文档分配id的,谢谢你的回答。但正如他们的网站上为简单起见所提到的,为了能够在db4o、memcached、redis或文件系统(即ServiceStack中包含的提供者)中持久化相同的POCO类,每个模型都必须有一个“Id”属性,这是它的主键。我正在处理的对象不一定有这个字段,我想如果扩展属性存在,整个概念将更容易分配。我的意思是,从理论上讲,我并不想讨论扩展属性的局限性,即使它们存在。我相当确定,如果类中没有定义Id字段,它将由ORM在表上自动创建。