我正在编写一个使用现有数据库的应用程序,该数据库有一些我根本无法修改的表,但我仍然可以添加新表。因此,假设我有一个旧表 Cities,我可以对其进行读取、创建、更新和删除,但我无法修改架构。然后,我添加了一个新表 Clients,它具有 Cities 的外键,但我无法在数据库服务器 (SQL SERVER 2008) 上添加关系,因为它还修改了 Cities 表,添加了关系。所以我想也许如果我将它们都添加到我的 linq-to-sql 上下文中,并在那里添加关系,linq-to-sql 会足够聪明地为我检查引用完整性,即使关系没有建立在数据库,它在上下文中。
我创建了一个新项目来尝试一下,我添加了两个没有关系的简单表,然后在 linq-to-sql 设计器上添加了关系,并尝试强制引用完整性异常,但看起来它不起作用。
DBContextDataContext db = new DBContextDataContext();
City l = new City();
l.name= "Buenos Aires";
db.Cities.InsertOnSubmit(l);
Client c = new Client();
c.name = "Mike";
c.City = l;
db.Clients.InsertOnSubmit(c);
db.SubmitChanges(); // This works
db.Cities.DeleteOnSubmit(l);
db.SubmitChanges(); // This shouldn't work, but it works
知道是否可以强制参照完整性?还是在数据库上添加关系是唯一的方法?