2017-03-28 12 views
1

"Animal"이라는 클래스가있는 모델이 있습니다.
은 "동물"클래스는 몇 가지 속성을 가지고 있지만,의에는 다음과 같은 속성에 집중하자 : 나는 수행하여 작업 할 수있는 CreateDate을 얻을 수있는 "동물"클래스에서내부 설정자가있는 OData 속성 - 예 : UpdateDate

  1. CreateDate
  2. createuser가

다음 :

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
public DateTime CreateDate { get; set; } 

이렇게하면 d에 기본값을 설정하여 데이터베이스에 CreateDate를 생성 할 수 있습니다. atabase는 "GetDate()"로 표시됩니다.
외부 호출자가 OData 서비스의 CreateDate 필드를 "설정"하려고하면 전달되는 데이터가 무시됩니다.
외부 발신자의 "읽기 전용"속성입니다.

OData 서버에서 CreateUser = System.Threading.Thread.CurrentPrincipal.Identity.Name을 설정해야한다는 점을 제외하고 CreateUser와 비슷한 작업을 수행해야합니다.

개인 집합을 시도하는 경우 OData 서비스는 속성을 전혀 노출하지 않습니다.
공개 세트를 사용하면 외부 발신자가 속성을 변경할 수 있습니다. 나는 내부 _CreateUser를 설정 한 "동물"생성자에서
= System.Threading.Thread.CurrentPrincipal.Identity.Name

나는 서버 측에 설정하는 방법을 모르겠어요.

답변

1

다음은 내가 작업해야하는 항목입니다. 나는 다음과 같은 한 모델에서

:

builder.EntitySet<Animal>("Animals")); 
builder.EntityType<Animal>().Ignore(p => p.CreateUser); // hide CreateUser 
builder.StructuralTypes.First(t => t.ClrType == typeof(Animal)) 
    .AddProperty(typeof(Animal).GetProperty(nameof(Animal.CreateUserName))); // show CreateUserName 
+0

인터페이스 및 컨텍스트 저장 변경 이벤트를 사용하여 조금 더 깨끗한 다른 방법을 찾았습니다. http://stackoverflow.com/questions/24590911/entity-framework-code-first-datetime-field-update-on-modification – goroth

0

빈 세터로 가짜로 만들 수 있습니다. 공개 세트를보고 OData 엔터티에서 속성을 생성합니다. 가장 깨끗한 해결책은 아니지만 작동해야합니다.

public class Animal 
{ 
    private string _createUser; 

    public string CreateUser 
    { 
     get { return _createUser; } 
     set { } 
    } 

    internal SetCreateUser(string user) 
    { 
     _createUser = user; 
    } 
} 
+0

불행하게도이 내가 _createUser을 설정해야하는 서버에 있기 때문에 작동 않는 경우 : WebApiConfig에

public string CreateUser { get; set; } [NotMapped] public string CreateUserName { get { return CreateUser; } set { CreateUser = CreateUser ?? System.Threading.Thread.CurrentPrincipal.Identity.Name; } } 

그리고 나는 다음을했다 데이터베이스 "CreateUser"가 null이거나 모델이 처음 생성 될 때 – goroth

+0

다시 말해서 가장 좋은 것은 아니지만 내부 설정 메소드를 사용하여 설정해야하는 어셈블리에 InternalsVisible을 부여 할 수 있습니다. – TGRA