1

EntityFramework4.1を使用しています。すべてのドメインエンティティの共通情報を保持する「DomainEntities」テーブルがあります。ユーザーテーブルがあり、UserIDは「DomainEntities」からの外部キーです。

EDMXを参照してください。 EDMXファイル

次のコードを実行すると、エラーが発生します。

依存操作の有効な順序を判別できません。依存関係は、外部キーの制約、モデル要件、またはストアで生成された値が原因で存在する可能性があります。

コード:

static void addUserTest()
{
    DomainEntity userToAdd = new DomainEntity()
    {
        EntityName = "Test User",
        EntityTypeID = DomainEntity.eEntityType.User,
        EntityCreationDate = new DateTime(),
        EntityLastUpdateDate = new DateTime(),
        EntityCreatorUserID = 0,
        EntityUpdaterUserID = 0,
        EntityParentID = null,
        UserDetails = new User()
        {
            Username = "TestUser",
            Password = "123",
            FirstName = "Test",
            LastName = "User"

        }
    };

    using (var context = new CamelotDB())
    {
        context.DomainEntities.Add(userToAdd);
        context.SaveChanges();
    }

}

EFが必要なINSERT順序を理解できる理由がわかりません。これは、「DomainEntities」に1つのレコード、次に「Users」に1つのレコードである必要があります。私は何を間違っているのですか?

4

2 に答える 2

3

もう1日検索したところ、問題はCreatorとUpdaterの自己参照外部キーにあることがわかりました。

CreatorIDはNullableではなく、UpdaterIDも同様です。これが、EFがデータベースの実際のエンティティを指すナビゲーションプロパティを必要とする理由です。そのため、テストユーザーの初期化子に次の行を追加しました。

EntityCreatorUserID = 0,
Creator = context.DomainEntities.Find(0),
EntityUpdaterUserID = 0,
Updater = context.DomainEntities.Find(0),
于 2012-12-30T05:51:10.390 に答える
1

Userに関連させるのではなく、のサブクラスDomainEntityを作成する必要があるようです。エンティティモデルデザイナでは、これは継承ツールを使用して実行されます(ツールボックスの継承ツールをダブルクリックしてから、親エンティティを1回クリックし、子エンティティを1回クリックします)。UserDomainEntity

Userこれは、 ;の性質をより正確に記述します。aUser DomainEntityです。Userあなたの現在のモデルは、aがに関連していることを示唆していますがDomainEntity、これは正しくないようです。

于 2012-12-29T20:30:44.433 に答える