我正在寻找一种简单的方式将任何数据对象存储在SQL Server中,而无需先定义表。将某种类型的IEnumerable存储到新的SQL Server数据库表(代码优先)的简单方法C#
想想这个伪代码anomyous型(LINQ)的创建的IEnumerable:
var result = from item in items select new { item.First, item.Last, Age = 42 };
我正在寻找一个简单的解决方案,一个函数调用是这样的:
// StoreResultInNewTable(database/context, tablename, result);
我首先意识到EF6和代码,但我不想定义显式类型(类)。而且我不需要像缓存数据或详细跟踪数据库布局这样的实体框架的其他部分。如果表已经存在并且对象不能存储在那里,则引发错误。否则(创建表)并插入数据。
数据插入不应该太慢(SqlBulkCopy/BulkInsert)。
编辑:我真的寻找一种解决方案,其中结果集存储为SQL服务器中的普通数据库表,这意味着将.NET类型字符串的属性存储为(n)varchar,小数金钱等等。数据库中的列名应该是1:1属性名称。我对细节很灵活,但应该类似于EF6映射(没有明确定义的类型)。 没有键值存储,没有存储序列化对象,没有NoSQL,没有平面文件。
编辑2:为了使这更清晰,我给关于我的例子类型的详细信息:
class Person
{
public string First {get; set;}
public string Last {get; set;}
}
IEnumerable<Person> items = ...
这意味着result
一些IEnumerable<TypeWithoutName>
。编译器是唯一已知名称TypeWithoutName
,但我可以以类型安全的方式使用它,例如,通过LINQ。我很确定这种类型可以通过反思进行检查。
正如在评论中提到的:我正在寻找一个ORM,它采用result
中的匿名类型,并构建一些带两个nvarchar列和一个整数列(以及相应的插入)的create table语句。
为什么不把它保存到一个平面文件 – rajeemcariazo 2015-02-10 17:42:08
这听起来像你希望使用一个RDBMs正是它*不是*设计的。研究像MongoDB这样的NoSQL解决方案来存储这样的数据。 另一个潜在的选择,如果你必须使用SQL Server ...我想......会创建一个xml/json对象的表示并将它们存储在一个列中。然而,这将会使查询颇为困难。 – Kritner 2015-02-10 17:42:52
SQL Server(作为关系数据库)无法做到这一点,它需要具有预定义模式的表。您可能希望改为查找文档数据库选项。 – haim770 2015-02-10 17:43:24