Linq to sql LINQ到SQL中的表关系

Linq to sql LINQ到SQL中的表关系,linq-to-sql,foreign-keys,Linq To Sql,Foreign Keys,假设我有两个表a和B。表a有一个名为a_ID的主键,类型为int,表B有一个外键,类型为a_ID 当我将这两个表添加到数据上下文类时,它会正确地创建类以及它们之间的关联 我的问题是,B类将有一个int类型的属性,称为a_ID。它也将有一个a类型的属性,称为a 现在,如果在运行时,我进行一个LINQ to SQL调用,它填充了一个B的实例,B.a_ID和B.a.a_ID将是相同的值。是什么阻止开发人员犯一些错误,在B.a\u ID中输入与B.a.a\u ID不同的值 在数据库中,由于外键约束,您无

假设我有两个表a和B。表a有一个名为a_ID的主键,类型为int,表B有一个外键,类型为a_ID

当我将这两个表添加到数据上下文类时,它会正确地创建类以及它们之间的关联

我的问题是,B类将有一个int类型的属性,称为a_ID。它也将有一个a类型的属性,称为a

现在,如果在运行时,我进行一个LINQ to SQL调用,它填充了一个B的实例,B.a_ID和B.a.a_ID将是相同的值。是什么阻止开发人员犯一些错误,在B.a\u ID中输入与B.a.a\u ID不同的值


在数据库中,由于外键约束,您无法执行此操作,但LINQ to SQL类如何在客户端强制执行这些约束?

LINQ to SQL在连接到关系数据库时,实际上只是为您构建SQL,因此如果您在数据库中做了非法的事情(例如违反外键约束)真正阻止你的是数据库,而不是LINQ本身。LINQ到SQL本身中的约束只是从数据库中检索出来的

因此,除非您谈论将其附加到XML段或类似的内容(我看不出您的问题暗示了这一点),否则LINQ本身并没有强制执行任何内容。它实际上只是一个非常复杂的代码编写器

编辑:我说过LINQtoSQL只是一个代码编写器,但我应该注意,允许您使用强类型等的元数据很好。我不是想贬低这个产品