2016-05-10 5 views
0

親クラスがListableEntityであり、Descriptionプロパティが属性[DbUnique]を使用しており、SQLテーブルのこのフィールドに一意の制約が設定されています。親クラスのプロパティの属性が子のそのプロパティに適用されないようにするにはどうすればよいですか?

public abstract partial class ParentEntity<T> { 

    [DbUnique] 
    public string Description { get; protected set; } 
} 

私は親とは違って、Descriptionプロパティの重複値を持つことが許され、ListableEntityの子クラスを作成する必要があります。しかし、私の子クラスで親属性を非表示にしても、このDbUnique属性は何とか適用され、重複した記述を防止します。ここでは、私が子供のクラスのために持っているものの関連する抜粋です:

public class ChildEntity : ParentEntity<ChildEntity> 
{ 
    public new string Description { get; private set; } 
} 

私は非常にCで新しくなっています。私の理解では、この子のDescriptionプロパティは親のChildEntityオブジェクトを上書きしますが、重複した説明でChildEntitiesを保存しようとすると、「ユニークなインデックス 'IX_Description'を持つ重複するキー行を挿入できません。誰もがなぜ親属性からのこの属性がまだ適用されているのか、そしてこれを防ぐ方法を知っていますか?ありがとうございました。

+0

これはLusocf置換原則に違反しているようだ、とあなたは効果を戦っています。 EFはLSPに違反しないように設計されている可能性が高いので、解決策を見つけたら、おそらくハッキリでしょう。 –

+0

@NexTerren隠すことは無効になっていないので、影響を与えずに親を子に置き換えることができます(Childクラスのユーザーは混乱しますが、LSPの違反はありません)。 OPの問題は、コードショーとは関係ない可能性が高いですが、DBは親の情報に基づいて生成され、子クラスを使用して操作することは一意性制約をテーブルから削除しません。 –

答えて

0

あなたは、ParentDescriptionやChildDescriptionなどのプロパティ名を変更することができます(これが最適なオプションだと思います)。もう1つは、属性 "Description"を "abstract"としてもう1つのクラスを持つことです。そのため、子クラスでは、それらの属性をオーバーライドする必要があります。

祖父母 - > ParentEntity - > ChildEntity

関連する問題