Платформа сущностей не создает оператор вставки - PullRequest
0 голосов
/ 31 августа 2011

Интересно, не могли бы вы помочь мне с чем-то, чем я почесал голову?Сначала я начну с кода!

public class DevelopmentImageContext : Context<DevelopmentImage>
{
    public List<DevelopmentImage> DevelopmentImages { get; private set; }

    public DevelopmentImageContext() { }

    public DevelopmentImageContext(int imageId)
    {
        EntityId = imageId;
    }

    public DevelopmentImageContext(Development development)
    {
        var result = (from d in Context.DevelopmentImages
                      where d.Development == development
                      select d).ToList();
        DevelopmentImages = result;
    }

    public override DevelopmentImage GetEntity()
    {
        if (EntityId != 0)
        {
            return Context.DevelopmentImages.Where(d => d.ImageId == EntityId).FirstOrDefault();
        }

        throw new EntityNotFound("Entity was either null or 0");
    }

    public override void CreateEntity(DevelopmentImage entity)
    {
        Context.DevelopmentImages.AddObject(entity);
        Context.SaveChanges();
    }

    public override void CreateEntities(List<DevelopmentImage> entities)
    {
        foreach (var entity in entities)
        {
            try
            {
                Context.DevelopmentImages.AddObject(entity);
                CommitChanges();
            }
            catch (Exception exception)
            {
                throw new Exception("Unable to create Object", exception);
            }

        }
        Context.SaveChanges();
    }
}

Существует абстрактный класс ContextManager со свойством Context.Я могу опубликовать это при необходимости.

При вызове метода CreateEntities я прохожу список разработки, зацикливаю их и вставляю в базу данных.Проблема в том, что ничего не создано.Пробовал использовать EFProf, чтобы увидеть, создает ли он транзакцию с запросом вставки и ничего.У меня есть другой метод в классе Context под названием DeleteEntities, который эффективно удаляет все данные в данных, используя некоторый базовый SQL и метод ExecuteStoreCommand.В EFProf я вижу, что этот SQL выполняется.

Есть идеи, почему я не могу создать объект?

Спасибо, Мэтт

Редактировать: я переименовал свойство Context в ContextEntityчтобы увидеть, если это что-то меняет и нет: (

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Я чувствую себя глупо. Я мог бы опубликовать класс ContextManager, потому что кто-то мог бы опознать мою ошибку:

    private static GirlingsWebEntities _entity;

    public GirlingsWebEntities ContextEntity
    {
        get
        {
            if (HttpContext.Current == null)
            {
                return _entity ?? (_entity = new GirlingsWebEntities());
            }
            else
            {
                string sKey = "context_" + HttpContext.Current.GetHashCode().ToString("x");
                if (!HttpContext.Current.Items.Contains(sKey))
                {
                    HttpContext.Current.Items.Add(sKey, new GirlingsWebEntities());
                    ((GirlingsWebEntities)HttpContext.Current.Items[sKey]).ContextOptions.LazyLoadingEnabled = true;
                }
                return (GirlingsWebEntities)HttpContext.Current.Items[sKey];
            }

        }
    }

    public void CommitChanges()
    {
        ContextEntity.SaveChanges();
    }
}

где я возвращаю _entity ?? (_entity = new GirlingsWebEntities ()); Я просто возвращал обычное свойство, а не статическое свойство, поэтому использовал другое соединение с базой данных, которое не существовало!

Надеюсь, это поможет кому-то еще:)

0 голосов
/ 31 августа 2011

Вы проверяли строку подключения к БД? Поскольку вы сначала используете код, он, вероятно, создает новую базу данных, и все, кажется, работает нормально. Лучше всего указывать строку подключения явно.

Если у вас нет файла конфигурации, будет использоваться база данных по умолчанию:

Источник данных =. \ SQLEXPRESS; Начальный Каталог = MyNamespace.MyContext Интегрированное Безопасность = True; MultipleActiveResultSets = True

Чтобы узнать:

using (BlogContext context = new BlogContext())
{                             
   string cs = context.Database.Connection.ConnectionString;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...