2011-08-31 51 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());我只是返回一個正常的屬性,而不是一個靜態屬性,因此使用不同的連接到數據庫,一個不存在!

希望這可以幫助其他人了:)