0

私は Linq to Sql の初心者で、外部エンティティへのアクセスに関する問題に直面しています。関連する DB は次のとおりです。

  • Id、ProducerId の 2 つの列を持つテーブル MyClass

  • Id、Affix の 2 つの列を持つ Table Person

ここに私の部分クラスがあります:

public partial class MyClass
{
    public string ProducerAffix
    {
        get { return Producer.Affix; }
    }
}

また、ProducerId 外部キーに関連する Producer プロパティが生成される dbml デザイナー ファイル:

[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Person_MyClass1", Storage="_Person1", ThisKey="ProducerId", OtherKey="Id", IsForeignKey=true)]
    public Person Producer
    {
        get
        {
            return this._Person1.Entity;
        }
        set
        {
            Person previousValue = this._Person1.Entity;
            if (((previousValue != value) 
                        || (this._Person1.HasLoadedOrAssignedValue == false)))
            {
                this.SendPropertyChanging();
                if ((previousValue != null))
                {
                    this._Person1.Entity = null;
                    previousValue.MyClass.Remove(this);
                }
                this._Person1.Entity = value;
                if ((value != null))
                {
                    value.MyClass.Add(this);
                    this.ProducerId = value.Id;
                }
                else
                {
                    this.ProducerId = default(System.Guid);
                }
                this.SendPropertyChanged("Producer");
            }
        }
    }

MyClass の Affix プロパティにアクセスすると、ObjectDisposedException がスローされます... プロパティにアクセスするときに Datacontext を開く必要がありますか?

私はこの記事を読みましたLINQ to SQL ObjectDisposedException on entity that never ask for but really would want to avoiding a ViewModel a... 他に解決策はありますか?

どうもありがとう !

編集

JATの回答に従って、DLOを使用しようとしましたが、外部の値を返す方法が本当にわかりません...このチュートリアルを見つけました( http://www.codeproject.com/Articles/37857/Optimizing-LINQ-Queries -using-DataLoadOptions )、クエリを作成する必要がありますか?

public string Affix
    {
        get
        {
            using (var db = new DBDataContext())
            {
                var dlo = new DataLoadOptions();
                dlo.LoadWith<Person>(p => p.Affix);
                db.LoadOptions = dlo;
                ...
                return Producer.Affix;
            }
        }
    }
4

1 に答える 1

0

後で同じ問題に直面する可能性がある人のために、私はついにこれがどこから来たのかを知りました. Person と MyClass を追加したとき、次の関数を使用しました。

public static Person Add(Person person)
{
    using (var db = new DBDataContext())
    {
        db.Person.InsertOnSubmit(person);
        db.SubmitChanges();
        return person;
    }
}

「使用」を削除するとうまくいき、外部キーのエンティティにアクセスできるようになりました。近い問題のために「使用」が「新規」よりも優れた解決策であると読んだので、その理由が心からわかりませんが、それでは正しく機能しないようですので、削除しました。

public static Person Add(Person person)
{
    var db = new DBDataContext();

    db.Person.InsertOnSubmit(person);
    db.SubmitChanges();
    return person;

}
于 2015-02-27T16:00:38.960 に答える