1

Plants と Information の 2 つのテーブルがあります。すべてのプラントには多くの情報がありますが、各プラントには単一の MainInformation があります。したがって、この 2 つの間には 1 対多の関係と 1 対 1 の関係があります。Information テーブルには PlantID があり、Plants テーブルには MainInformationID があります。両方のテーブルの両方のフィールドが null にならないようにします。ただし、2 つのレコードのいずれもテーブルに挿入することはできません。これは、それぞれのレコードでフィールドが null でない必要があるためです。つまり、自分自身を作成するには、最初に他のレコードを作成する必要があります。おそらく、これは適切なデータベース設計ではなく、何かを変更する必要がありますか? (データベースとエンティティ フレームワークは初めてです)

データベース自体に手動で挿入しようとしましたが、できません。このコードも EntityFramework で試しました。

using (var context = new MyEntities())
        {
            var p = new Plant()
            {
                LatinName = "latinNameTest",
                LocalName = "localNameTest",
                CycleTime = 500
            };

            var i = new Information()
            {
                ShortDescription = "ShortDesc",
                LongDescription = "LongDesc"
            };

            p.MainInformation = i;
            i.Plant = p;

            context.AddToPlants(p);
            context.AddToInformation(i);

            context.SaveChanges();                
        }
4

3 に答える 3

2

null を許可するようにテーブルを変更する必要があります。これを行う他の方法はありません。

于 2010-03-07T12:49:27.893 に答える
2

の一つ

  • 1-1 FK 列は NULL でなければなりません
  • 子の前に親を挿入できるようにするには、FK を無効にする必要があります
  • FL列でデフォルトで使用される単一のダミー情報行があります

SQL Server では、「コード変更」権限がないと遅延制約チェックが許可されないため、トランザクションでラップしても機能しません。

他の問題があるEAVスキーマのように聞こえます

于 2010-03-07T16:26:21.557 に答える
0

データベース トランザクションと、それらを Entity Framework で使用する方法を確認することができます。両方の INSERTS を単一の db トランザクションにラップすることができるので、両方が入るか、どちらも入らないという結果のみが得られます。

EF を使用したトランザクションのリンクは次のとおりです私はそれを読んでいませんでしたが、あなたが始めるのに十分にそれらについて話しているようです.

于 2010-03-07T13:06:18.603 に答える