我首先在我的asp.net应用程序中使用EF代码
我有一个名为DayType的实体类
public class DayType : LookUpCommonField
{
[Key]
public int DayTypeId { get; set; }
public Guid DayTypeGuid { get; set; }
[Required]
[StringLength(50)]
public string Value { get; set; }
public string Description { get; set; }
public string Colour { get; set; }
public string ColorCode { get; set; }
public bool IsFullShiftOt { get; set; }
public bool IsAllowedAsHoliday { get; set; }
public virtual ICollection<Holiday> Holiday { get; set; }
public virtual ICollection<ShiftOvertimeCondition> ShiftOvertimeConditions { get; set; }
}
LookupCommonField类包含
public class LookUpCommonField
{
public int Status { get; set; }
public int CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public int? EditedBy { get; set; }
public DateTime? EditedOn { get; set; }
public int? LocationId { get; set; }
}
维护 Status
以识别记录是活动还是已删除。
数据库中的所有表都包含此Status
字段,并且我没有实际删除我的记录。
但是在DayType
我想要删除记录,我想跟踪引用DayTypeId
的表格。
在EntityFramework
中有没有可能的方法来实现这个目标?
我暂时这样做。
var dayType = myDb.DayType.FirstOrDefault(x => x.DayTypeGuid == dayTypeGuid);
string sqlCommand = string.Format("SELECT SCHEMA_NAME(schema_id) + '.' + t.name AS 'Table Name' FROM sys.tables t INNER JOIN sys.columns c ON c.object_id = t.object_id WHERE c.name like '%{0}Id%' ORDER BY 'Table Name' ", "DayType");
var tables = myDb.Database.SqlQuery<string>(sqlCommand).ToList();
int? count = 0;
var isSuccess = false;
foreach (var table in tables.Where(t => t.ToString() != "TimeAttendance.DayType"))
{
var searchCount = myDb.Database.SqlQuery<int?>(string.Format("SELECT count({0}Id) FROM {1} WHERE {2}Id={3} and Status=1", "DayType", table, "DayType", dayType.DayTypeId)).FirstOrDefault();
if (searchCount != null && Convert.ToInt32(searchCount) > 0)
{
count += searchCount;
}
}
if(count ==0)
{
myDB.DayType.Remove(dayType);
myDB.SaveChanges();
isSuccess= true;
}
我想使用EntityFramework实现这一目标。 (不使用直接SQL查询)
- Edited-- 谢谢大家关注这个问题。我能够找到另一种解决方案来获取给定表的关系集。
var objToCheck = myDB.DayType.FirstOrDefault(w=>w.DayTypeId==entityId);
var relatedEntities = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)myDB).ObjectContext.ObjectStateManager.GetRelationshipManager(objToCheck).GetAllRelatedEnds().ToList();
foreach(IRelatedEnd relatedEnd in relatedEntities.ToList())
{
// I want to check every entry in the related end to check the Status
// Does any body has a suggession?
}