2017-05-02 3 views
0

그래서 두 가지 속성을 가진 EF 클래스가 있습니다.다른 속성의 속성으로 속성 지정?

public class MyTable 
{ 
    public DateTime Requested { get; set; } 
    public Guid RequestedUserID { get; set; } 
} 

은 지금은 변경 될 때 요청 RequestedUserID로 현재 사용자 ID를 삽입 할 수 있어야합니다. 이렇게하려면 EF의 DbContext.SaveChanges() 이벤트를 무시하고 수정 된 열에 내 코드에서 연결된 UserID 열을 수정하도록 지정된 속성이 있는지 확인하십시오. 내 DbContext.SaveChanges() 경우에 나중에 다음

public class MyTable 
{ 
    [TrackModifingUser(UserIDColumn = nameof(RequestedUserID))] 
    public DateTime Requested { get; set; } 
    public Guid RequestedUserID { get; set; } 
} 

와 내가 이름으로 재산을 취득하고 그에 따라 값을 설정합니다 : 예 태그 특성.

문제는 내 속성이 어떻게 든 속성 자체를 저장할 수 있기를 바랍니다. 그리고 그것으로 부동산을 이름으로 바라 보지 마십시오. 이 같은.

public class MyTable 
{ 
    [TrackModifingUser(UserIDColumn = RequestedUserID)] 
    public DateTime Requested { get; set; } 
    public Guid RequestedUserID { get; set; } 
} 

런타임에 속성을 확인할 수 있습니까? 동일한 열에 대해 한 번만 이름으로 속성을 가져 오는 것을 피하기 위해 사용할 수있는 모든 종류의 캐싱이 있습니까?

답변

0

문제가 제대로 이해되면 특정 필드에 "현재 사용자 ID"필드로 레이블을 지정하고 태그가있는 경우 DbContext.SaveChanges()가 해당 필드를 현재 사용자의 값으로 자동 설정하려고합니다. 이것이 맞다면 아마 이것은 인터페이스의 유스 케이스 일 것이다.

public interface ITracksCurrentUser 
{ 
    Guid CurrentUserID {get;set;} 
} 

public class MyTable : ITracksCurrentUser 
{ 
    public DateTime Requested { get; set; } 
    public Guid RequestedUserID { get; set; } 

    public Guid ITracksCurrentUser.CurrentUserID 
    { 
     get { return RequestedUserID;} 
     set { RequestedUserID = value;} 
    } 
} 

public override int SaveChanges() 
{ 
    foreach(userentity in ChangeTracker.Entries().Select(e => e.Entity).OfType<ITracksCurrentUser>()) 
     userentity.CurrentUserID = Session["UserID"]; 
} 
+0

EF는 사용 예에 ​​불과합니다. 목적은 개별 열이 'GetPropertByName'(또는 메소드 이름이 무엇이든간에)을 사용하지 않고 속성에서 서로를 지정할 수있게하는 것입니다. – Licht

관련 문제