EntityFramework получить связанный элемент по идентификатору или полю - PullRequest
0 голосов
/ 09 марта 2012

У меня есть два объекта, таких как:

public class Area : IEntity
    {
        public virtual int Id { get; set; }
        public virtual int AreaTypeLookupId { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(100)]
        public virtual string Name { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(2)]
        public virtual string VMRegionCode { get; set; }
        public virtual int GISPrimaryKeyId { get; set; }
        public virtual string ConcatenatedGISAreaIds { get; set; }
        public virtual int? ParentAreaId { get; set; }
        public virtual int? ParentRegionAreaId { get; set; }
        [Column(TypeName = "char")]
        [StringLength(3)]
        public virtual string CostCenterCode { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(64)]
        public string CreatedByUserName { get; set; }
        public DateTime CreatedDateTime { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(64)]
        public string LastModifiedByUserName { get; set; }
        public DateTime? LastModifiedDateTime { get; set; }

        // Navigation properties
        public virtual AreaTypeLookup AreaTypeLookup { get; set; }
    }

public class AreaTypeLookup : IEntity
    {
        [Column("Id")]
        public virtual int AreaTypeLookupId { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(100)]
        public virtual string Name { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(10)]
        public virtual string ShortName { get; set; }
        public virtual int? AreaTypeLevelLookupId { get; set; }
        public virtual int? OperationTypeLookupId { get; set; }
        public virtual int? ParentAreaTypeLookupId { get; set; }
        public bool IsAvailableToSetBudgetAgainst { get; set; }
        public int DisplaySortOrder { get; set; }
        public bool IsProtected { get; set; }
        public DateTime? DeletedDateTime { get; set; }
        public int? ManagedByServiceTypeLookupId { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(64)]
        public string CreatedByUserName { get; set; }
        public DateTime CreatedDateTime { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(64)]
        public string LastModifiedByUserName { get; set; }
        public DateTime? LastModifiedDateTime { get; set; }
    }

Я хочу получить все области, где areatypelookupid = 3. Для этого типа области имя «регион»

Что такоелучший способ получить области для сопровождения кода:

Это:

var areas = _unitOfWork.AreaRepository.GetAll().Where(x => x.AreaTypeLookupId == 3);

или это:

var areas = _unitOfWork.AreaRepository.GetAll().Where(x => x.AreaTypeLookup.Name == "region");

, где, я думаю, «регион» действительно должен стать изфайл ресурсов.

1 Ответ

0 голосов
/ 09 марта 2012

Как правило, вы захотите использовать первичный ключ, так как он должен быть неизменным.Однако, если вы можете гарантировать, что имя поиска не изменится, тогда поиск по имени будет допустимым.Причина, по которой я говорю "терпимо", заключается в том, что выполнение запросов вне первичного ключа будет более эффективным в базе данных, помимо неизменности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...