获取EntityFramework中的对象引用列表

时间:2014-06-06 08:44:45

标签: c# asp.net-mvc entity-framework

我首先在我的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?
}

0 个答案:

没有答案