0

データベースに 2 つのテーブルがあります。

[Table]
public class Names: INotifyPropertyChanged, INotifyPropertyChanging
{        
    public Names()
    {
        this._namesCar = new EntitySet<Coord>(this.OnCarAdded, this.OnCarRemoved);
    }

    private int _id;
    private string _name;
    private EntitySet<Cars> _namesCar;

    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync= AutoSync.OnInsert)]
    public int Id
    {
        get { return _id; }
        set
        {
            if (_id != value)
            {
                NotifyPropertyChanging("Id");
                _id = value;
                NotifyPropertyChanged("Id");
            }
        }
    }

    [Column]
    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                NotifyPropertyChanging("Name");
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }

    [Association(Storage = "_namesCar", ThisKey = "Id", OtherKey = "NamesId")]
    public EntitySet<Cars> NamesCar
    {
        get { return _namesCar; }
        set
        {
            if (_namesCar != value)
            {
                NotifyPropertyChanging("NamesCar");
                _namesCar = value;
                NotifyPropertyChanged("NamesCar");
            }
        }
    }

    private void OnCarAdded(Cars car)
    {
        car.Name= this;
    }

    private void OnCarRemoved(Cars car)
    {
        car.Name= null;
    }       

[Table]
public class Cars: INotifyPropertyChanged, INotifyPropertyChanging
{

    private int _id;
    private int _nameid;
    private string _cars;        
    private EntityRef<Names> _carNames = new EntityRef<Names>();

    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
    public int Id
    {
        get { return _id; }
        set
        {
            if (_id != value)
            {
                NotifyPropertyChanging("Id");
                _id = value;
                NotifyPropertyChanged("Id");
            }
        }
    }

    [Column(DbType = "Int")]
    public int NameId
    {
        get { return _nameid; }
        set
        {
            if (_nameid != value)
            {
                NotifyPropertyChanging("NameId");
                _nameid = value;
                NotifyPropertyChanged("NameId");
            }
        }
    }

    [Association(Storage = "_carNames", ThisKey = "NameId", OtherKey = "Id", IsForeignKey = true)]
    public Names Names
    {
        get { return this._carNames.Entity; }
        set
        {
            NotifyPropertyChanging("Names");
            this._carNames.Entity = value;
            if (value != null)
            {                    
                this._nameid = value.Id;
            }
            NotifyPropertyChanged("Names");
        }
    }       

それらは同じデータコンテキストに属しています:

public class CarsDataContext : DataContext
{
    // Pass the connection string to the base class.
    public CarsDataContext(string connectionString)
        : base(connectionString)
    { }

    // Specify a table for the items.
    public Table<Names> RecNames;
    public Table<Cars> RecCars;

}

新しい名前を追加して、その名前に関連付けられた新しい車を追加できます。1 つの名前から車を削除することもできます。ただし、名前を削除しようとすると、例外が発生します。その名前に関連する車があるからだと思います。関連付けられた車を含む名前を削除する最良の方法は何ですか? 私の意図は、最初にすべての車を削除してから名前を削除することです。

ありがとう!

4

1 に答える 1

0

DeleteRule属性のプロパティを使用してみてくださいAssociation。具体的には、注釈に示されているように「CASCADE」を使用してください。

nullに設定すると、削除動作は追加されません。たとえば、「CASCADE」は「ONDELETECASCADE」を外部キー関係に追加します。

于 2013-01-25T21:26:31.417 に答える