2012-01-15 100 views
4

您可能知道如何确定实体是否在其他实体中引用它?检查实体是否在Code First中的其他实体中有引用

如果我用SQL语言说话,我的意思是,我可以检查某个表中的主键是否是外键。

我想标记一个实体对象为IsDeleted(它是一个属性),只有当它没有从其他表中引用它时,我想避免物理删除。

谢谢

+1

你有导航属性相关的实体。如果没有时间使用它们,那么你只需从数据库加载它们并检查是否有任何对象。 – 2012-01-15 18:47:45

回答

1

对于简单的情况下,您可以检查使用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); 
} 
+0

嗨和谢谢你的例子,但我不认为这是一个很好的技术,因为如果很多表都与我有关?如果客户和运输表格明天与我有关又怎么办?想想看... – 2012-01-15 22:33:35

+0

是的,同意了。但是,如果您使用的是Transact-SQL,那么这个问题是否适用?如果您已经在数据库中定义了外键约束,那么SQL Server会(默认情况下)阻止您删除仍然引用的主键;但是,除非您针对所有外键表生成连接查询,否则它不会为您提供选择这些行的功能;请参阅[SQL:如何查找未使用的主键](http://stackoverflow.com/questions/5388715/sql-how-to-find-unused-primary-key)。 – Douglas 2012-01-16 18:57:23

相关问题