0

假设你有这个表结构:

患者 -> 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();
            }

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

4

2 回答 2

2

我同意 tvanfosson 在数据库上执行此操作。另一种方法(恕我直言可能更安全)是创建一个存储过程并从您的代码中调用它。确保它全部包含在一个可以处理回滚的事务中,以防出现问题

于 2009-12-01T14:32:08.713 回答
1

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

于 2009-12-01T13:26:18.940 回答