Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的;“LINQ到SQL”;ID';不同步吗?_C#_.net_Linq To Sql_Associations - Fatal编程技术网

C# 为什么我的;“LINQ到SQL”;ID';不同步吗?

C# 为什么我的;“LINQ到SQL”;ID';不同步吗?,c#,.net,linq-to-sql,associations,C#,.net,Linq To Sql,Associations,我用.mdf中的表构建了我的LINQ到SQL文件,其中表“测量”与“实验信息”表关联(一对一)。在测试我的应用程序时,我输入了一些“测量”条目。因此,自动增量计算了表的ID。直到后来,我才开始添加带有“实验信息”表的条目 两者都正确创建,但“测量”-表的ID永远不等于“实验信息”-表的ID,因为测量ID已经被计数 因此,当我调用LINQ join语句时,如: bs.DataSource = from m in measDAL.getMeasurements() join i i

我用.mdf中的表构建了我的LINQ到SQL文件,其中表“测量”与“实验信息”表关联(一对一)。在测试我的应用程序时,我输入了一些“测量”条目。因此,自动增量计算了表的ID。直到后来,我才开始添加带有“实验信息”表的条目

两者都正确创建,但“测量”-表的ID永远不等于“实验信息”-表的ID,因为测量ID已经被计数

因此,当我调用LINQ join语句时,如:

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 
    };
在这种情况下,“equal”真的意味着“==”吗?这意味着我必须以某种方式重置数据库中的所有ID,不是吗

我的结论正确吗?如果是,如何进行重置

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

newMeasurement.SpectrumSet.Add(newSet); 
在“实验信息”中,我有一对一的关系,我这样做:

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();
我希望我能提供足够的关于我的问题的信息


提前谢谢。

你没有一对一的关系,从你所描述的,你根本没有关系

让一个表使用自动递增id

让另一个表使用该表中的id来设置其id以定义关系(它也可以有一个单独的自动id来标识自己的行)

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


然后,其他技术人员将使用该关系(在本例中为linq2sql,但它也用于从数据库获取数据的其他方法)。

您的数据库中有
m.Measurementid
i.ExperimentInfoID
btoh自动增量字段?如果是这样,这是错误的做法。其中一个表应该有一个外键字段,它是另一个表中条目的id。这不应该是自动递增的,所以你可以插入任何正确的ID。我想这也适用于“一对多”关系?是的。数据库设计的一个基本原则是,引用另一个表的任何表都应该使用一个表的主键和另一个表中的外键。是的,在一对多表中,然后在“多”表中,您将有一个“parentID”或非唯一的东西,允许您引用“一”表。因此,我必须始终设置I.ID=m.ID。这不是一对多的问题吗?因为那样的话,我会有几个相同ID的桌子?这不是我想说的。也许我没有很好地解释自己,但遗憾的是,评论并不是进行深入交谈的好地方。谷歌搜索“外键”可能是一个好的开始。但作为一个简单的例子,我可能有三个表,顺序,地址和项目。每个都有自己的ID。订单表可能还有包含地址表ID的字段“AddressID”。这列中可能有重复的值,但这没关系,这只是意味着许多订单都将发送到同一地址。Items表也可能有OrderID标记它所属的顺序。。。