2011-08-31 48 views
0

想知道你是否可以帮我做些什么我一直在挠头。我会先从代码开始!实体框架没有创建插入语句

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。

任何想法,为什么我不能创建对象?

谢谢, 马特

编辑:我已经把其更名为背景,以ContextEntity,看看是否改变任何东西,没有:(

+0

我甚至试图ContextEntity.AddToDevelopments(实体);没有快乐 – Matt

+0

单个实体的'CreateEntity'是否工作?什么是CommitChanges()? – Slauma

+0

我对此有进一步更新;直接与业务层直接交流没有任何问题。我正在尝试实现服务,并且在与业务层交谈时此服务未创建要执行的语句。有什么特别的我需要做的服务层,让它来创建一个数据库连接? – Matt

回答

0

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

如果你碰巧有没有配置文件,缺省数据库将用于:

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

要了解:

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

与数据库的连接正常 - 我可以看到它正在查询数据库,但没有创建插入语句... – Matt

+0

我建议在savechanges调用之前调查对象上下文。是否添加了状态的所有对象?你可以通过调用ObjectStateManager.GetObjectStateEntries http://msdn.microsoft来做到这一点。COM/EN-US /库/ bb738497.aspx – yonexbat

0

我觉得massivly愚蠢。我有前人的精力发布ContextManager类,因为会有人spoted我的错误:

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());我只是返回一个正常的属性,而不是一个静态属性,因此使用不同的连接到数据库,一个不存在!

希望这可以帮助其他人了:)