Linq操作与外键的联系

 

一个饭局有多个参与者

 

这是一些基本方法

   

    public class DinnerRepository:IDinnerRepository
    {
        NerdDinnerDataContext dc = new NerdDinnerDataContext();

        public IQueryable<Dinners> FindAllDinners()
        {
            return dc.Dinners;
        }

        public IQueryable<Dinners> FindUpComingDinners()
        {
            return from dinner in dc.Dinners
                   where dinner.EventDate > DateTime.Now
                   orderby dinner.EventDate
                   select dinner;
        }

        public Dinners GetDinner(int id)
        {
            return dc.Dinners.Where(d => d.DinnerID == id).FirstOrDefault();
        }

        public void Add(Dinners d)
        {
            dc.Dinners.InsertOnSubmit(d);
        }

 

        // 一个饭局有多个参与者

        // 删掉饭局,就要删掉参与者

       
public void Delete(Dinners d)
       {
            // 删除与之为外键的信息
            dc.RSVP.DeleteAllOnSubmit(d.RSVP);
            dc.Dinners.DeleteOnSubmit(d);
       }

        public void Save()
        {
            dc.SubmitChanges();
        }
    }

 

那么我取消一个饭局,那么即必须把RSVP表与之相关的参与者也要删掉,那么linq提供了一个方便的方法

 

        public void Delete(Dinners d)
        {
            // 删除与之为外键的信息
            dc.RSVP.DeleteAllOnSubmit(d.RSVP);
            dc.Dinners.DeleteOnSubmit(d);
        }

 

 

下面的示例代码首先检索一个 dinner 对象,然后添加一个 RSVP 对象。这里,使用 Dinner 对象的 RSVPs
集合对象。当调用 Resposity 对象的 Save()方法时,一条新的记录添加 RSVP表中。

 

DinnerRepository dinnerRepository = new DinnerRepository(); 
Dinner dinner = dinnerRepository.GetDinner(5); 
 
RSVP myRSVP = new RSVP();
myRSVP.AttendeeName = "ScottGu"; 
dinner.RSVP.Add(myRSVP); 

dinnerRepository.Save();

时间: 2024-10-24 04:33:46

Linq操作与外键的联系的相关文章

聊聊Oracle外键约束的几个操作选项

关系型数据库是以数据表和关系作为两大对象基础.数据表是以二维关系将数据组织在DBMS中,而关系建立数据表之间的关联,搭建现实对象模型.主外键是任何数据库系统都需存在的约束对象,从对象模型中的业务逻辑加以抽象,作为物理设计的一个部分在数据库中加以实现. Oracle外键是维护参照完整性的重要手段,大多数情况下的外键都是紧密关联关系.外键约束的作用,是保证字表某个字段取值全都与另一个数据表主键字段相对应.也就是说,只要外键约束存在并有效,就不允许无参照取值出现在字表列中.具体在Oracle数据库中,

关于MySQL外键的简单学习教程_Mysql

在MySQL中,InnoDB引擎类型的表支持了外键约束. 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立: 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好处:可以使得两张表关联,保证数据的一致性和实现一些

mysql外键(Foreign Key)介绍和创建外键的方法_Mysql

在MySQL中,InnoDB引擎类型的表支持了外键约束.外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持):2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立:3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作

MySQL外键使用及说明详解_Mysql

一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立: 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好处: 可以使得两张表关联,保证

存在外键关联的主表truncate如何做

主外键是数据库提供的一种两表之间强制关联的方法,也可以从应用层实现. 优点 缺点 数据库实现的主外键 由数据库层机制保证,无需应用额外实现 强关联,不易扩展变更 应用实现的主外键 易扩展变更 完全由应用控制,要求较高 我认为需要根据实际情况进行取舍,例如表不复杂,可以由应用实现,若表之间关联较多且复杂,那么交由数据库处理,至少保证不会错. 存在主外键关联的主表,由于存在外键关联关系,因此有些操作就会禁止,例如truncate. 实验 1. 创建测试表 SQL> create table tbl_

mvc怎么操作全是外键的数据库表

问题描述 mvc怎么操作全是外键的数据库表由于mvc不会自动生成全是外键的表的实体类,那运用mvc的linq查询怎么操作呢? 解决方案 解决方案二:mvc怎么会有linq查询??解决方案三:运用linq查询语句解决方案四:引用2楼u014479626的回复: 运用linq查询语句 使用join语句管理主表与外键表通过select语句来获取要显示的主表值或者外键表值.参见:解决方案五:linq现在最常用的操作是查询内存集合,还是很方便的,要是用于linqtosql或者linqtoef之类的,原理就

MySQL修改外键删除时操作出现error 121如何解决

环境:MySQL Server 5.1 + Navicat for Mysql 8.2 问题:修改外键删除时操作出现121错误 解决: 把外键名改为 其他名字. 错误信息参考: error 121 这是外关键字名字重复的错误,即使是在不同的表 中,外关键字的名字也不能重复. error 150 这类错误包括3种情况: 1. 外键和被引用外键类型不 一样,比如integer和double: 2. 找不到要被引用的列: 3. 表的字符编码不一样. 查看本栏目更多精彩内容:http://www.bia

Oracle外键约束修改行为(三)CASCADE操作

Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作. 这篇简单描述一下CASCADE操作. 上一篇描述了Oracle外键处理操作:SET TO NULL,这里简单介绍一下CASCADE操作.还是利用前面例子的表,不过约束需要重建. SQL> DROP TABLE T_C; 表已删除. SQL> DROP TABLE T_P; 表已删除. SQL> CREATE TABLE T_P (ID NUM

Oracle外键约束修改行为(二)SET TO NULL操作

Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作. 这篇简单描述一下SET TO NULL操作. 上一篇描述了Oracle外键处理默认操作:No Action,这里简单介绍一下SET TO NULL操作.还是利用前面例子的表,不过约束需要重建. SQL> DROP TABLE T_C; 表已删除. SQL> DROP TABLE T_P; 表已删除. SQL> CREATE TABLE T_P