我想在实体框架中执行通用插入。这就是我写的 -
static public void Insert<T>(MyEntities DataContext, T obj) where T : class
{
try
{
DataContext.AddObject(DataContext,obj);
DataContext.SaveChanges();
}
catch (Exception e)
{
throw new Exception("Problems adding object" + e);
}
}
但是你可以看到AddObject方法不是我想要的...它提供了异常,因为它需要我想要在对象中传递的enitysetname然后将该对象添加到我的数据库中。但我不能做AddtoObjectName()因为我不知道对象。任何人都可以指出我在正确的方向..
答案 0 :(得分:6)
在EF 4中你可以这样做:
var os = DataContext.CreateObjectSet<T>();
os.AddObject(obj);
DataContext.SaveChanges();
请删除堆栈try/catch
。
答案 1 :(得分:2)
问题是实体框架允许使用相同类型的多个集合的可能性,因此必须具有类型名称才能工作。如果知道您将不使用具有相同类型的多个集合,则可以遵循命名约定,从而可以从该类型构造名称。
我们遇到了同样的问题,我们最初决定为每个实体集[Type]Set
命名(例如FormSet
,ActivitySet
)。
随着.NET 4.0的出现,Microsoft已经公开了他们用于在Visual Studio中的EF工具中复制实体集的API,因此我们正在考虑可能坚持使用默认复数,并使用该工具来弄清楚默认名称是什么(例如Forms
,Activities
)。
using System.Data.Entity.Design.PluralizationServices;
...
internal static readonly PluralizationService PluralizationService =
PluralizationService.CreateService(CultureInfo.CurrentCulture);
...
static public void Insert<T>(MyEntities DataContext, T obj) where T : class
{
try
{
string setName = PluralizationService.Pluralize(typeof(T).Name);
DataContext.AddObject(setName,obj);
DataContext.SaveChanges();
}
catch (Exception e)
{
throw new Exception("Problems adding object" + e);
}
}