mad*_*lor 14 linq class foreign-keys associations linq-to-sql
我正在使用一些具有关系的遗留表,但这些关系尚未明确设置为主键/外键.我使用"Linq To Sql Classes"创建了一个.dbml文件,并建立了正确的Case.CaseID = CaseInfo.CaseID关联.我得到的类是CasesDataContext.
我的桌子(一对多):
Case
------------------
CaseID (int not null)
MetaColumn1 (varchar)
MetaColumn2 (varchar)
MetaColumn3 (varchar)
...
CaseInfo
------------------
CaseInfoID (int)
CaseID (int nulls allowed)
CaseInfoMeta (varchar)
...
Run Code Online (Sandbox Code Playgroud)
我是LinqToSQL的新手,我很难做到......
CasesDataContext db = new CasesDataContext();
var Cases = from c in db.Cases
where c.CaseInfo.CaseInfoMeta == "some value"
select c;
Run Code Online (Sandbox Code Playgroud)
(编辑)我的问题是CaseInfo或CaseInfos不能作为Cases的成员.
我从一位同事那里听说我可能会尝试ADO.Net实体数据模型来创建我的数据上下文类,但还没有尝试过,想看看我是在浪费时间还是应该走另一条路线.任何提示,链接,帮助将非常感激.
egl*_*ius 26
返回设计器并检查关系是否设置正确.这是一个真实的例子,BillStateMasters具有"CustomerMasters1"属性(该州的客户): alt text http://i43.tinypic.com/ohl00l.jpg
PS.正在清理命名......
更新1:您还需要确保两个表都已定义主要.如果未在数据库上定义主键(并且无法以任何原因定义),请确保在设计器中定义它们.打开列的属性,并将其设置为主键.也就是说,如果您没有实体的主键,实体跟踪也将无法工作,对于删除意味着它实际上不会更新实体.因此,请务必检查所有实体并使用主键(如我所说,如果它不能在db上,那么在设计器上).
CasesDataContext db = new CasesDataContext();
var Cases = from c in db.Cases
join ci in db.CaseInfo on
ci.ID equals c.InfoID
where ci.CaseInfoMeta == "some value"
select new {CASE=c, INFO=ci};
Run Code Online (Sandbox Code Playgroud)
我的"加入"linq有点生疏,但上面应该接近你所追求的.