当前位置:  开发笔记 > 编程语言 > 正文

没有显式外键关系的Linq To SQL

如何解决《没有显式外键关系的LinqToSQL》经验,为你挑选了2个好方法。

我正在使用一些具有关系的遗留表,但这些关系尚未明确设置为主键/外键.我使用"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)
...

我是LinqToSQL的新手,我很难做到......

CasesDataContext db = new CasesDataContext();
var Cases = from c in db.Cases
            where c.CaseInfo.CaseInfoMeta == "some value"
            select c;

(编辑)我的问题是CaseInfo或CaseInfos不能作为Cases的成员.

我从一位同事那里听说我可能会尝试ADO.Net实体数据模型来创建我的数据上下文类,但还没有尝试过,想看看我是在浪费时间还是应该走另一条路线.任何提示,链接,帮助将非常感激.



1> eglasius..:

返回设计器并检查关系是否设置正确.这是一个真实的例子,BillStateMasters具有"CustomerMasters1"属性(该州的客户): alt text http://i43.tinypic.com/ohl00l.jpg

PS.正在清理命名......

更新1:您还需要确保两个表都已定义主要.如果未在数据库上定义主键(并且无法以任何原因定义),请确保在设计器中定义它们.打开列的属性,并将其设置为主键.也就是说,如果您没有实体的主键,实体跟踪也将无法工作,对于删除意味着它实际上不会更新实体.因此,请务必检查所有实体并使用主键(如我所说,如果它不能在db上,那么在设计器上).


Freddy有解决方案..如果您的主键也是一个标识字段,唯一的警告就是你会得到"成员错误的不正确的AutoSync规范".您可能必须在设计器中关闭该列的自动同步.
啊,主键!+1
来自我的主键+1.我一直在靠近墙壁撞了近一个小时.谢谢!

2> Andrew Theke..:
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};

我的"加入"linq有点生疏,但上面应该接近你所追求的.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有