我想做一个泛型函数,这将有助于避免重复我的代码。该函数必须与通用类型T(也许是T2)通用,因为它必须引用正在创建的表中的不同字段。不过,我不知道这是否可能。通用函数添加实体到表 - 实体框架6和C#
比方说,我有以下实体添加到数据库:
List<Type_1> entities_1 = new List<Type_1>()
{
new Type_1{Field1="<Value of field 1",Field2="Value of Field 2", ...},
new Type_1{Field1="<Value of field 1",Field2="Value of Field 2", ...},
...
new Type_1{Field1="<Value of field 1",Field2="Value of Field 2", ...},
};
entities_1.ForEach(e => dbContext.Types_1.Add(e));
dbContext.SaveChanges();
entities_1 = null;
List<Type_2> entities_2 = new List<Type_2>()
{
new Type_2{Field1="<Value of field 1",Field2="Value of Field 2", ...},
new Type_2{Field1="<Value of field 1",Field2="Value of Field 2", ...},
...
new Type_2{Field1="<Value of field 1",Field2="Value of Field 2", ...},
};
entities_2.ForEach(e => dbContext.Types_2.Add(e));
dbContext.SaveChanges();
entities_2 = null;
etc.
是否有可能使带有参数的功能:List<T1>
和dbContext
指T2
,将负责创建不同的表的功能?也许这需要参数化这些Type_(n)
和Types_(n)
。我想下面的东西,但编译器不支持T2接受它,并点:
private void addEntitiesToDbContext<T1,T2>(List<T1> ent, MyTypeContext dbContext)
{
ent.ForEach(e => dbContext.T2.Add(e));
dbContext.SaveChanges();
}
感谢
编辑:
我觉得我已经得到了采取空间道歉评论部分-.-
我刚刚意识到什么C Bauer说关于存储库模式。这是如果有人也对这个设计感兴趣,下面是我推荐的一个非常好的链接:Repository Pattern Explained。还有一个关于Repository Pattern设计here的问题。祝你好运。
你好Tau。我不知道你为什么被打分,所以我给你打分。你的解决方案真的很先进。虽然我理解抽象类的概念,但仍然很难遵循。我想我需要更多时间,并会尽快破解它。感谢您的时间:) – Celdor 2014-10-08 11:31:42
@Ziko - 存储库是一种设计模式,这是相当先进的,但应满足您的需求100%。在使用存储库时,输入'Repository entityTypeRepository = new Repository ();'其中entitytype是您试图对其执行CRUD操作的实体。虽然通常您的存储库实现会暴露SubmitChanges或SaveChanges。 –
2014-10-08 12:51:00
嗨。我花了一些教程来了解这里的例子。现在没问题,但仍需要就这个例子提出两个问题。 *为什么RepositoryBase继承自IRepository ?我的猜测是Interface提供的约束在这里是引用类型。另外,接口不允许实现字段。 *在Repository 中,我不明白输入:'DbContext = context; DbSet = context.Set ();' 不应该是:'DbContext dbContext = context; DbSet DbSet = context.Set ();'谢谢。 –
Celdor
2014-10-25 16:47:30