在PLINQO中删除M:M的正确方法?

时间:2009-12-01 13:00:53

标签: c# many-to-many plinqo

假设您有这个表结构:

患者 - > PatientTag - >标签

患者和标签之间典型的N:M关系,PatientTag是两个FK的中间实体。 (PatientId和TagId)。

我想删除一个特定的标签,我有它的ID。我这样做但我想知道是否有更好的方法,因为这是我使用PLINQO编写的第一种方法,我不想从一开始就创建不良做法。

            using ( MyDataContext dc = DataContextFactory.GetDataContext() )
            {

                var options = new DataLoadOptions();
                options.LoadWith<Paciente>(p => p.PacienteTagList);
                options.LoadWith<PacienteTag>(pt => pt.Tag);
                dc.LoadOptions = options;

                // Get the Tag we're going to remove from the DB.
                var tag = dc.Manager.Tag.GetByKey( idTag);

                // Remove each patient from the association. 
                foreach ( Paciente pac in tag.PacienteList1 )
                {
                    // we need to retrieve it, won’t let us use the ‘pac’ object.
                    var pax = dc.Manager.Paciente.GetByKey( pac.IdPaciente );
                    pax.TagList.Remove(tag);
                }

                // now remove the tag
                dc.Manager.Tag.Delete(tag.TagId);

                // And commit the changes
                dc.SubmitChanges();
            }

感谢您对该主题的任何见解。

2 个答案:

答案 0 :(得分:2)

我同意tvanfosson在数据库上这样做。另一种方式(可能更安全imho)将创建一个strored过程并从您的代码调用它。确保它全部包含在可以处理回滚的事务中,以防出现问题

答案 1 :(得分:1)

如何简单地使用带有级联删除的外键,然后删除标记本身并让数据库负责删除所有引用。如果你想确保它没有被使用,你可以先检查没有任何患者与之相关,但如果有其他进程访问同一个数据库,你可能需要将它包装在一个事务中。 / p>