0

私はwpfアプリを書いています。異なるテーブルに対応する2つのエンティティクラスを持つローカルデータベース(sqlCE)があります。最初のクラスはアカウントで、2番目のクラスはムーブメントです。2つのテーブルの間には1対多の関係があります。アカウントはより多くの動きを持つことができます。アカウントクラスは次のとおりです。

[Table]
public class Account
{
    .....other private fields...
    private Int16 iDA;
    private EntitySet<Movement> movements;

    ...other properties with column attribute....

    //primary key
    [Column(IsPrimaryKey = true, Storage="iDA", IsDbGenerated = true, AutoSync = AutoSync.OnInsert, DbType = "smallint")]
    public Int16 IDA
    {
        get { return iDA; }
        private set { iDA = value; }
    }

    //association
    [Association(Storage = "movements", OtherKey = "IDA")]
    public EntitySet<Movement> Movements
    {
        get { return movements; }
        set { this.movements.Assign(value); }
    }       

    public Account()
    {
        this.movements = new EntitySet<Movement>();
    }
}

そしてここにMovementクラスがあります:

[Table]
public class Movement
{
    ...other fields...
    private Int16 iDA;
    private int iDM;
    private EntityRef<Account> myAcc;

    //primary key
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert, DbType = "int NOT NULL IDENTITY", Storage = "iDM")]
    public int IDM
    {
        get { return iDM; }
        set { iDM = value; }
    }

    //property links the two tables
    [Column(DbType = "smallint", Storage="iDA", isPrimaryKey=true)]
    public Int16 IDA
    {
        get { return iDA; }
        set { iDA = value; }
    }

    //association
    [Association(Storage = "myAcc", ThisKey = "IDA")]
    public Account MyAccount
    {
        get { return this.myAcc.Entity; }
        set { this.myAcc.Entity = value; }
    }

    ......

    public Movement()
    {
        this.myAcc = new EntityRef<Account>();
    }

}

2つのテーブルをリンクするIDAプロパティを定義します。その後、datacontextクラスを記述します。

public class DataBase : DataContext
{

    public Table<Account> AccountTable
    {
        get { return this.GetTable<Account>(); }
    }
    public Table<Movement> MovementTable
    {
        get { return this.GetTable<Movement>(); }
    }

    public DataBase(string connection) : base(connection) { }
}

メインクラスでデータベースを作成しますが、アカウントオブジェクトを入力しようとすると、SQL例外が発生します。InsertOnSubmit(Account a)を呼び出してデータを問題なく挿入できますが、SubmitChanges()を呼び出すと、プログラムが停止し、「列にnull値を含めることはできません。[列名= IDA、テーブル名=アカウント]」という例外が表示されます。

誰でも私を助けることができますか?

4

2 に答える 2

0

IDAフィールドのColumn属性のパラメータを使用DbType = "smallint not null identity"してみてください。CanBeNull = false

于 2013-01-11T06:22:00.613 に答える
0

私は問題を解決し、両方のクラスのInt IDAプロパティを変更し、いくつかの調整を行いました。

于 2013-01-12T10:27:34.073 に答える