2011-04-26 8 views
0

を削除し、私はテーブルを表す以下のクラスがあります。を挿入し、複雑な構造に

public class PriceDefinition 
    { 
     public virtual long Id{get;set;} 
     public virtual IList<Rule> Rules{get; set;} 
     public virtual IList<PriceDefinitionAddition> Additions{get; set;} 
     public virtual IList<CustomerPrice> CustomersPrices { get; set; } 

     public PriceDefinition() { } 
} 

public class Rule 
{ 
    public virtual long PriceDefinitionId { get; set; } 
    public virtual string FieldName { get; set; } 
    public virtual string Values { get; set; } 
    public virtual string Text { get; set; } 

    public Rule() { } 
} 

public class CustomerPrice 
{ 
    public virtual long Id { get; set; } 
    public virtual long CustomerId { get; set; } 
    public virtual long PriceDefinitionId { get; set; } 
    public virtual long TaskPriceId { get; set; } 
    public virtual Price TaskPrice { get; set; } 
    public virtual IList<CustomerAdditionPrice> AdditionsPrices { get; set; } 

    public CustomerPrice() { } 
} 

public class CustomerAdditionPrice 
{ 
    public virtual long CustomerPriceId { get; set; } 
    public virtual long AdditionId { get; set; } 
    public virtual long PriceId { get; set; } 
    public virtual Price Price { get; set; } 

    public CustomerAdditionPrice() { } 
} 

public class Price 
{ 
    public virtual long Id { get; set; } 
    public virtual decimal PriceSum { get; set; } 
    public virtual decimal PricePercent { get; set; } 
    public virtual long? UnitTypeId { get; set; } 
    public virtual UnitTypeWrapper UnitTypeWrapper { get; set; } 
    public UnitTypeEnum UnitType { get { return UnitTypeWrapper; } } 

    public Price() { } 
} 

public class PriceDefinitionAddition 
{ 
    public virtual long PriceDefinitionId { get; set; } 
    public virtual long AdditionId { get; set; } 

    public PriceDefinitionAddition() { } 
} 

私はPriceDefinitionのIDを持っていると私はすべての関連データを削除する必要があります。この複雑な構造全体を反復する必要がありますか?オブジェクト全体をロードするためにオブジェクトをロードするにはどうすればよいですか?この構造をすべて削除する簡単な方法はありますか?

私はPriceDefinitionオブジェクトを持っています。私はすべての関連データを含めて挿入する必要があります。 SaveChangesを呼び出すと、すべてのIDが適切な値を取得する方法で、私はどのようにそれを行うことができますか?すべてを挿入するためにすべての要素を反復処理する必要がありますか?

答えて

3

削除を解決するには、データベースとEntityデザイナの両方でカスケード削除を使用します。カスケード削除を使用しない場合は、実際に構造全体をアプリケーションにロードし、エンティティを1つずつ削除する必要があります。

挿入を解決するには、新しいエンティティをすべての新しい関連エンティティで準備し、メインエンティティで単にAddObjectを使用します。また、コンテキストによって追跡されないすべての関連エンティティを追加します。あなたのIDがデータベースによって生成され、エンティティデザイナーでStoreGeneratedPattern.Identityと正しく設定されている場合は、何もする必要はありません。

編集:

別の方法は、(各削除のため= 1 DB往復)構造をロードおよびエンティティを一つずつ削除すると非常に遅くなる可能性があるため、それは複雑すぎる場合、単純な構造を削除するストアドプロシージャを使用しています。

+0

@Ladislav Mrnka:そう、エンティティを1つずつ削除する必要があります(エンティティの一部はソフト削除です)。どのように構造全体を読み込むことができますか(子オブジェクトと孫オブジェクトのインクルードがあります)。 "LoadAll"などありますか? – Naor

+0

@Naor:いいえ、すべてがロードされていません。構造全体に対してインクルードを手動で指定する必要があります。 –

+0

@Ladislav Mrnka:なぜ、それぞれの削除に対して1回のDB往復を書いていますか? Proceedの最後にSaveChangesを使用することはできませんか? – Naor

関連する問題