1

1 対多の関係を持つ linq データベースに問題があります。クラスは次のとおりです。

    private EntityRef<Account> _account;

    [Association(Storage = "_account", ThisKey = "IDMovement", OtherKey = "IDAccount", IsForeignKey = true)]
    public Account Account
    {
        get { return this._account.Entity; }
        set
        {
            Account previousValue = this._account.Entity;
            if (((previousValue != value) || (this._account.HasLoadedOrAssignedValue == false)))
            {
                NotifyPropertyChanging("Account");
                if ((previousValue != null))
                {
                    this._account.Entity = null;
                    previousValue.Movements.Remove(this);
                }
                this._account.Entity = value;
                if ((value != null))
                {
                    value.Movements.Add(this);
                }
                NotifyPropertyChanged("Account");
            }
        }
    }

そして反対側:

private EntitySet<Movement> _movements;

    [Association(Storage = "_movements", OtherKey = "IDMovement", ThisKey = "IDAccount")]
    public EntitySet<Movement> Movements
    {
        get { return this._movements; }
        set { this._movements.Assign(value); }
    }

    private void OnMovementAdded(Movement movement)
    {
        NotifyPropertyChanging("Movement");
        movement.Account = this;
        NotifyPropertyChanged("Movement");
    }

    private void OnMovementRemoved(Movement movement)
    {
        NotifyPropertyChanging("Movement");
        movement.Account = null;
        NotifyPropertyChanged("Movement");
    }

私の問題は、データベースに新しい動きを挿入する必要があるときに、データベースに既にある値を「EntityRef _account」変数に割り当てる方法がわからないことです。

例: アカウント "general" の動きを挿入する必要があります。このアカウントはもちろん既にデータベースに存在します...どうすれば自分の動きに対して、アカウント "general" が "movement.Account" にあると言うことができますか?私のデータベースに含まれているものとまったく同じですか?

そのようなことを試しましたが、新しいアカウントを作成したように機能しません。

Movement movement = new Movement();
            movement.Category = (from f in context.Categories
                         where f.Name == this.Categories.ElementAt(this.ChoosenCategory).Name
                         select f).FirstOrDefault();
            movement.Account = (from f in context.Accounts
                     where f.Name == ChoosenAccount.Name
                     select f).FirstOrDefault();

            context.Movements.InsertOnSubmit(movement);
            context.SubmitChanges();
4

1 に答える 1

0

次のような EntityRef のLoad()メソッドを呼び出す必要があります。if (!order.CustomersReference.IsLoaded) order.CustomersReference.Load();

于 2012-10-01T15:09:53.673 に答える