实体框架不创建插入语句

时间:2011-08-31 14:43:50

标签: c# entity-framework

不知道你是否可以帮助我做一些我一直在摸不着头脑的事情。我先从代码开始!

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方法时,我会遍历一个Development列表,循环遍历它们并插入到数据库中。问题是,什么都没有创造。尝试使用EFProf来查看它是否使用插入查询创建了一个事务而没有任何内容。我在Context类中有另一个名为DeleteEntities的方法,它使用一些基本的SQL和ExecuteStoreCommand方法有效地删除数据中的所有数据。在EFProf中,我可以看到这个SQL正在执行。

为什么我无法创建对象?

谢谢, 马特

编辑:我已将属性Context重命名为ContextEntity,以查看是否更改了任何内容而不是:(

2 个答案:

答案 0 :(得分:0)

您检查了数据库连接字符串吗?由于您首先使用代码,它可能正在创建一个新的数据库,一切似乎都可以正常工作。最好明确提供连接字符串。

如果您碰巧没有配置文件,将使用默认数据库:

  

数据源=。\ SQLEXPRESS;初始   目录= MyNamespace.MyContext;集成   安全= TRUE; MultipleActiveResultSets =真

要找出:

using (BlogContext context = new BlogContext())
{                             
   string cs = context.Database.Connection.ConnectionString;
}

答案 1 :(得分:0)

我感到非常愚蠢。我已经发布了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());我只是返回一个普通的属性而不是静态属性,因此使用与数据库的不同连接,一个不存在的连接!

希望这有助于其他人:)