2016-07-23 93 views
1

我的目標是有大量的插入/更新操作來實現。 域模型由相關文件夾實體圖片實體儘可能多到一的。實體框架的關係,AutoDetectChanges =假問題

通常我將圖像添加到數據庫背景是這樣的:

var folder = dbContext.Folders.First(); 

var image = new Image(); 
image.Folder = folder; 
image.<SomeFields> = "<SomeData>"; 

dbContext.Images.Add(image); 
dbContext.SaveChanges(); 

爲了有更好的表現我關掉自動更改跟蹤:

dbContext.Configuration.AutoDetectChangesEnabled = false; 

現在我得到一個錯誤:

Entities in 'DbContext.Images' participate in the 'Image_Folder' relationship. 0 related 'Image_Folder_Target' were found. 1 'Image_Folder_Target' is expected.

我試着使用:

folder.Images.Add(image); 
dbContext.Entry(folder).State = EntityState.Modified; 

,但它並沒有幫助。

我應該如何修正錯誤?

UPD:固定代碼段

UPD2:簡化實體(從基類去除繼承(以使代碼的可讀性),最不必要的屬性):

Image.cs

public class Image 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 

    public string AuthorName { get; set; } 

    public string AuthorUrl { get; set; } 

    [StringLength(255)] 
    [Required] 
    [Column(TypeName = "VARCHAR")] 
    public new string File { get; set; } 

    [Required] 
    public bool IsCover { get; set; } 

    [Required] 
    public int Order { get; set; } 

    public virtual Product Product { get; set; } 

    [Required] 
    public virtual Folder Folder { get; set; } 

    public override string ToString() 
    { 
     return File; 
    } 

    public Image() 
    { 
     Order = 1; 
    } 
} 

Folder.cs

public class Folder 
{ 
    public int Id { get; set; } 

    public virtual Folder Parent { get; set; } 
    public virtual ICollection<Image> Images { get; set; } 
    public virtual ICollection<Folder> Folders { get; set; } 

    public string Name { get; set; } 

    public override string ToString() 
    { 
     return Name; 
    } 

    public Folder() 
    { 
     Images = new HashSet<Image>(); 
    } 
} 
+0

我測試你的代碼,沒有例外發生,但沒有數據輸入到數據庫 –

回答

1

我測試你的代碼,沒有例外發生,但沒有數據插入到數據庫中。試試這個,更換****代碼

dbContext.Configuration.AutoDetectChangesEnabled = false; 
var folder = dbContext.Folders.First(); 

var image = new Image(); 
image.Folder = folder; 
image.<SomeFields> = "<SomeData>"; 

**dbContext.Entry(image).State = EntityState.Added; ** 

dbContext.SaveChanges(); 
+0

我編輯的答案 - 我錯過additing到的DbContext部分。 正如你所看到的,我的對象添加到上下文,然後保存更改後,如果沒有一套AutoDetectChangesEnabled =假異常發生時 –

+0

,所有的事情是確定的,PLZ實體模型添加到的問題,如果沒有問題是其他的東西 –

+0

提供了一個更新 –