如何在实体框架中执行通用插入?

时间:2010-06-22 21:17:23

标签: entity-framework insert generics

我想在实体框架中执行通用插入。这就是我写的 -

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()因为我不知道对象。任何人都可以指出我在正确的方向..

2 个答案:

答案 0 :(得分:6)

在EF 4中你可以这样做:

var os = DataContext.CreateObjectSet<T>();
os.AddObject(obj);
DataContext.SaveChanges();

请删除堆栈try/catch

答案 1 :(得分:2)

问题是实体框架允许使用相同类型的多个集合的可能性,因此必须具有类型名称才能工作。如果知道您将不使用具有相同类型的多个集合,则可以遵循命名约定,从而可以从该类型构造名称。

我们遇到了同样的问题,我们最初决定为每个实体集[Type]Set命名(例如FormSetActivitySet)。

随着.NET 4.0的出现,Microsoft已经公开了他们用于在Visual Studio中的EF工具中复制实体集的API,因此我们正在考虑可能坚持使用默认复数,并使用该工具来弄清楚默认名称是什么(例如FormsActivities)。

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