0

.mdf内のテーブルからLINQtoSQLファイルを作成しました。ここで、テーブル「Measurement」は「Experiment_Info」テーブルに(1対1で)関連付けられています。アプリケーションをテストしているときに、いくつかの「測定」エントリを入力しました。したがって、自動インクリメントはテーブルのIDをカウントアップしました。「Experiment_Info」テーブルを使用してエントリを追加し始めたのはその後のことです。

どちらも正しく作成されていますが、Measurement-IDはすでにカウントアップされているため、「Measurement」テーブルのIDが「Experiment_Info」テーブルのIDと同じになることはありません。

したがって、LINQjoinステートメントを呼び出すときは次のようになります。

bs.DataSource = 
    from m in measDAL.getMeasurements()
    join i in measDAL.getExperimentInfo() on m.Measurementid equals i.ExperimentInfoID
    select new { 
        m.Measurementid, 
        m.MeasurementName, 
        i.DateTime, 
        i.Project 
    };

この場合、「等しい」は本当に「==」を意味しますか?つまり、データベース内のすべてのIDを何らかの方法でリセットする必要がありますね。

私の結論は正しいですか?もしそうなら、このリセットはどのように行うことができますか?

さらに、データベースにエントリを追加する方法を示したいと思います。これも問題になる可能性があるためです。「1対多」の関係でエントリを追加すると、次のように機能します。

newMeasurement.SpectrumSet.Add(newSet); 

「1対1」の関係にある「Experiment_Info」の場合、次のようにします。

Measurement newMeasurement = new Measurement();
newMeasurement.MeasurementName = name;

ExperimentInfo exInfo = new ExperimentInfo();
newMeasurement.ExperimentInfo = exInfo;


newMeasurement.ExperimentInfo.Analyze = analysis;
newMeasurement.ExperimentInfo.DateTime = dateTime;
newMeasurement.ExperimentInfo.DonorAge = donorAge;
newMeasurement.ExperimentInfo.Project = project;
newMeasurement.ExperimentInfo.Treatment = treatment;
newMeasurement.ExperimentInfo.MediaType = mediatype;
newMeasurement.ExperimentInfo.DonorAge = donorAge;
newMeasurement.ExperimentInfo.Passage = Passage;
newMeasurement.ExperimentInfo.Objective = objective;
newMeasurement.ExperimentInfo.Substrate = substrate;
newMeasurement.ExperimentInfo.Power = power;

measurements.InsertOnSubmit(newMeasurement);

measDAL.context.SubmitChanges();

私の問題について十分な情報を提供できればと思います。

前もって感謝します。

4

1 に答える 1

2

あなたはあなたが説明したことから1対1の関係を持っていません、あなたはまったく関係がありません。

1つのテーブルに自動インクリメントIDを使用させます。

他のテーブルにそのテーブルのIDを使用させて、関係を定義するためのIDを設定します(独自の行を識別するための個別の自動IDを持つ場合もあります)。

このようにして、データベースはテーブル間の関係を反映します。

その後、他の技術者がその関係を使用します(この場合、linq2sqlですが、データベースからデータを取得する他の手段にも使用されます)。

于 2012-09-03T10:07:50.993 に答える