无法使用DbLinq删除子实体

时间:2012-09-25 13:20:07

标签: c# sqlite dblinq

此问题与我的previous one有关。您可以在那里找到几乎所有代码,但此处报告的例外情况。我用int字段替换了可空字段,并且生成的代码放在null中我放了-1。通过这种方式,我设法解决了DbLinq代码引发的恼人异常。但现在我无法删除子实体! 特别是,我有一个患者与一些地址相关联。 PatientAddresses表保存三元组中的所有地址(PatientID,Address,DomicileStatus),其中前两个成员构成表的主键。我写了一个测试来指出这个问题:

static void TestAddresses()
    {
        Patient p1 = CreateRandomPatient();
        PatientAddress a1 = CreateRandomAddress();

        p1.Addresses.Add(a1);
        Database.Source.Patients.InsertOnSubmit(p1);
        TestUtility.SaveCloseAndReopen();

        Patient p2 = Database.Source.Patients.Single(p => p.ID == p1.ID);

        Debug.Assert(p2.Addresses.Count == 1);
        Debug.Assert(p2.Addresses[0].PatientID == a1.PatientID && p2.Addresses[0].Address.Equals(a1.Address));
        Debug.Assert(Database.Source.PatientsAddresses.Where(a => a.PatientID == a1.PatientID && a.Address == a1.Address).Count() > 0);

        p2.Addresses.RemoveAt(0);
        TestUtility.SaveCloseAndReopen();

        p2 = Database.Source.Patients.Single(p => p.ID == p1.ID);

        Debug.Assert(p2.Addresses.Count == 0); // <-- HERE
        Debug.Assert(!Database.Source.PatientsAddresses.Contains(a1));
    }

测试在指定的行处失败。长话短说,即使我删除了一个地址,它仍然留在数据库中。我甚至试图删除相应的PatientAddress行,但无济于事。我尝试了三个或四个变种,但我无法删除病人的地址。 用于生成这些表的代码如下:

create table Patients (
ID integer primary key,
FirstName text not null,
LastName  text not null,
Profession text,
IsMarried integer not null default 0,
HasChildren integer not null default 0,
Birthday integer not null    
);

create table PatientsAddresses (
PatientID integer,
Address text,
DomicileStatus text,
primary key (PatientID, Address),
foreign key (PatientID) references Patients(ID)
    on delete cascade 
    on update cascade
);

我无法找到避免这种行为的方法,谷歌也无济于事。

0 个答案:

没有答案