0

アダプターを使用して、具象型ではなくインターフェースをdbcontextにプラグインできるようにします。アダプタはそれ自体で動作しますが、1対1(親子)の関係をデータベースに保存するのに問題があります。

例外ソース

public void SaveDomain(IDomain domain){
    _entityRepositor = new Donors();
    _entityRepositor.DomainReps.Add(new DomainRep(domain));                
}

InvalidOperationException

Conflicting changes to the role 'DomainRep_TopLevelDomainRep_Target' of the relationship 'Edonics.Repositor.DomainRep_TopLevelDomainRep' have been detected.

外部キープロパティとナビゲーションプロパティは同期する必要がありますか?

public class DomainRep: IDomain
{
    private readonly IDomain _adaptee;        


    public DomainRep(IDomain adaptee)
    {
        _adaptee = adaptee;
    }

    [NotMapped]
    public IDomain Adaptee
    {
        get { return _adaptee; }
    }

    public string Id
    {
        get { return _adaptee.Id; }
        set { _adaptee.Id = value; }
    }

    public string TopLevelDomainRepId
    {
        get { return _adaptee.Tld.Id; }

        set { }
    }

    [ForeignKey("TopLevelDomainRepId")]
    public TopLevelDomainRep TopLevelDomainRep
    {
        get { return new TopLevelDomainRep(Tld); }
        set { Tld = value.Adaptee; }
    }

    public ITopLevelDomain Tld
    {
        get { return _adaptee.Tld; }
        set { _adaptee.Tld = value; }
    }

    public string SecondLevelDomainRepId
    {
        get { return _adaptee.Sld.Id; }  
        
        set { } 
    }

    [ForeignKey("SecondLevelDomainRepId")]
    public SecondLevelDomainRep SecondLevelDomainRep
    {
        get { return new SecondLevelDomainRep(Sld); }
        set { Sld = value.Adaptee; }
    }

    public ISecondLevelDomain Sld
    {
        get { return _adaptee.Sld; }
        set { _adaptee.Sld = value; }
    }
    
}

何か案は?

4

1 に答える 1

5

アダプターパターンは、EFの動作を妨げます。エンティティのナビゲーションプロパティに異なる実装を提供しています。たとえば、TopLevelDomainRepプロパティに複数回アクセスすると、同じID/エンティティキーを持つ複数のインスタンスが返されます。EFは、特定の主キー値のコンテキストごとに1つのインスタンスのみを処理します。

EFエンティティの上にドメインレイヤーを作成するか、期待どおりにEFエンティティを使用します。

于 2012-06-12T00:40:27.613 に答える