为什么我的“LINQ to SQL”ID不同步?

时间:2012-09-03 08:48:52

标签: c# .net linq-to-sql associations

我在.mdf中的表中构建了LINQ to SQL文件,其中表“Measurement”与“Experiment_Info”表相关联(一对一)。在测试我的应用程序时,我输入了一些“测量”条目。因此,自动增量计算了表格的ID。之后我才开始使用“Experiment_Info”-tables添加Entries。

两者都是正确创建的,但“Measurement”表的ID永远不会等于“Experiment_Info”表的ID,因为Measurement-ID已被计算在内。

所以当我正在调用LINQ连接语句时:

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,不是吗?

我的结论是对的吗?如果它们是如何重置的呢?

另外,我想展示如何向数据库添加条目,因为我认为这也可能是问题所在。当我在“一对多”关系中添加条目时,它的工作方式如下:

newMeasurement.SpectrumSet.Add(newSet); 

如果我在'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();

我希望我能提供足够的有关我的问题的信息。

提前致谢。

1 个答案:

答案 0 :(得分:2)

你与你所描述的没有一对一的关系,你根本没有任何关系。

让一个表使用自动递增ID。

让另一个表使用该表中的ID,设置其用于定义关系的ID(可能还有一个单独的自动ID用于标识自己的行)。

这样数据库就反映了表之间的关系。

其他技术人员将使用该关系(在这种情况下为linq2sql,但它也适用于从数据库获取数据的其他方法)。