Как выполнить универсальную вставку в рамках сущности? - PullRequest
3 голосов
/ 23 июня 2010

Я хочу выполнить общую вставку в рамках сущности.Это то, что я написал -

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 ]

6 голосов
/ 23 июня 2010

В EF 4 вы можете сделать:

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

И, пожалуйста, уберите едящий стек try/catch.

2 голосов
/ 23 июня 2010

Проблема в том, что Entity Framework допускает возможность использования нескольких наборов, использующих один и тот же тип, поэтому для работы должно иметь имя типа. Если вы знаете , что не будете использовать несколько наборов одного и того же типа, вы можете следовать соглашению об именах, которое позволяет создать имя из типа.

У нас была та же проблема, и мы изначально решили назвать каждый набор сущностей [Type]Set (например, FormSet, ActivitySet).

С появлением .NET 4.0 Microsoft представила API, который они используют для множественного набора сущностей в инструменте EF в Visual Studio, поэтому мы рассматриваем возможность придерживаться множественного числа по умолчанию и использовать этот инструмент для определения какое имя по умолчанию (например, 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);
    }
}
...