EF4: Получить EntitySet, указанный в виде строки - PullRequest
1 голос
/ 06 декабря 2010

У меня есть база данных со множеством отдельных изолированных таблиц, и мне нужно заполнить их содержимое их сущностями.

В настоящее время у меня есть для каждой таблицы что-то вроде этого:

try
{
    using(DBContext context = new DBContext())
    {
        var vehicleTypes = context.VehicleTypes;
        return vehicleTypes;
    }
}
catch(Exception ex)
{
//handle error
}

То, что я ищу, лучше всего описать примерно так:

var vehicleTypes = context.GetEntitySet(VehicleEntity);
var buildingTypes = context.GetEntitySet(BuildingEntity);

, где VehicleEntity, BuildingEntity (...) - сущности из модели сущностей. Я знаю, что у меня нет этой опции явно, но что-то подобное было бы неплохо. Метод расширения также является опцией ...

Я работаю с EntityFramework 4.0, POCO Self Tracking Entities (без прокси).

Спасибо

edit : Моя последняя попытка была такой:

    public static IEnumerable<TEntity> GetTableContent<TEntity>() where TEntity:class
    {
        try
        {
            using (var context = new DBEntities())
            {
                var result = context.ExecuteStoreQuery<TEntity>("SELECT * FROM " + typeof(TEntity).Name); //the table names correspond to Entity type class names
                return result;
            }
        }
        catch (Exception ex)
        {
            //handle error...
        }
    }

но я получаю ошибку:

The data reader is incompatible with the specified 'DBEntities.MyEntity'. A member of the type, 'Id', does not have a corresponding column in the data reader with the same name.

и это правда - имена не совпадают - но я подумал, что это сопоставило бы таблицу из запроса на основе определения edmx? Как я могу получить это право?

1 Ответ

0 голосов
/ 09 декабря 2010

Начните с кода, который действительно работает, прежде чем пытаться сделать его «универсальным»

result = context.ExecuteStoreQuery<Something>("SELECT SOMETHING_ID AS ID, ..., FROM SOMETHING...");
...