您可能知道如何确定实体是否在其他实体中引用它?检查实体是否在Code First中的其他实体中有引用
如果我用SQL语言说话,我的意思是,我可以检查某个表中的主键是否是外键。
我想标记一个实体对象为IsDeleted(它是一个属性),只有当它没有从其他表中引用它时,我想避免物理删除。
谢谢
您可能知道如何确定实体是否在其他实体中引用它?检查实体是否在Code First中的其他实体中有引用
如果我用SQL语言说话,我的意思是,我可以检查某个表中的主键是否是外键。
我想标记一个实体对象为IsDeleted(它是一个属性),只有当它没有从其他表中引用它时,我想避免物理删除。
谢谢
对于简单的情况下,您可以检查使用Any运营商外键的存在:
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
}
public class City
{
public int ID { get; set; }
public int CountryID { get; set; }
public string Name { get; set; }
}
public bool IsCountryReferenced(Country country, IEnumerable<City> cities)
{
return cities.Any(city => city.CountryID == country.ID);
}
嗨和谢谢你的例子,但我不认为这是一个很好的技术,因为如果很多表都与我有关?如果客户和运输表格明天与我有关又怎么办?想想看... – 2012-01-15 22:33:35
是的,同意了。但是,如果您使用的是Transact-SQL,那么这个问题是否适用?如果您已经在数据库中定义了外键约束,那么SQL Server会(默认情况下)阻止您删除仍然引用的主键;但是,除非您针对所有外键表生成连接查询,否则它不会为您提供选择这些行的功能;请参阅[SQL:如何查找未使用的主键](http://stackoverflow.com/questions/5388715/sql-how-to-find-unused-primary-key)。 – Douglas 2012-01-16 18:57:23
你有导航属性相关的实体。如果没有时间使用它们,那么你只需从数据库加载它们并检查是否有任何对象。 – 2012-01-15 18:47:45