Azure 테이블 저장소를 사용하고 있으며 엔티티의 null 및 기본값이 작동하는 방법에 대해 질문이 있습니다.Azure 테이블 저장소의 속성에 대한 기본값
특히, 나는 TableServiceEntity
을 확장하는 클래스가 있습니다. 이 클래스의 기본 생성자과 같이 다양한 속성에 대한 기본값을 설정하는 것입니다 :
public class MyEntity: TableServiceEntry
{
public MyEntity() : MyEntity("invalid", "invalid") {}
public MyEntity(string f1, string f2)
{
Field1 = f1;
Field2 = f2;
}
public string Field1 { get; set; }
public string Field2 { get; set; }
}
내가 로컬이 클래스를 테스트 (에뮬레이터) 다음과 같은 엔티티 구성하여 :
MyEntity e = new MyEntity("hello", null);
을 나는 개체를 업로드 로컬로 검색하고 예상대로 두 필드가 각각 "hello"및 null로 설정되었습니다.
그러나 Azure 클라우드에 동일한 엔티티를 업로드하면 두 속성에 대해 각각 "hello"및 "invalid"가 반환되었습니다. 엔티티를 저장
내 코드는 다음과 같습니다 :
public class MyTable : TableServiceContext
{
...
public void AddEntry(MyEntity e)
{
this.AddObject("MyTable", e);
this.SaveChangesWithRetries(SaveChangesOptions.ReplaceOnUpdate);
}
}
나는 기본 생성자는 인수를 취하지함으로써이 문제를 해결할 수 있었다,하지만 난 어떻게 테이블에 저장 작품의 근본적인 오해를 가지고있는 것처럼 지금은 기분이 . TableServiceEntry의 속성에 대한 기본값을 지정하면 해당 값이 클라우드의 테이블에있는 각 행의 기본값이되지만 에뮬레이터에는 없습니다 (즉, 클라우드 vs. SQL Express)는 사실입니까? 그렇다면 왜 클라우드에서 null
으로 기본값을 덮어 쓸 수 없습니까? Azure 테이블 스토리지에서 기본 생성자와 null
이 어떻게 작동하는지 설명하는 문서가 있습니까?
그냥 다른 방법을 설명하기 위해 일어나는 일은 null이 저장되지 않는다는 것입니다. 검색시 클래스는 값이 "invalid"로 초기화되고 저장소 라이브러리는 저장소에서 반환 된 값으로 필드를 덮어 씁니다. Field2에는 값이 없으므로 (null도 아님) Field2는 건드리지 않고 여전히 "invalid"를 포함합니다. – smarx
내가 관찰 한 동작은 정확하게 @smarx와 @Lucifure가 기술하는 방식입니다. 두 가지 주요 테이크 어웨이가 있습니다. (1)'null'은 저장/반환되지 않습니다. (2) 엔티티를 Azure 테이블에서 가져올 때 컨트롤의 흐름은 기본 생성자가 호출 된 다음 테이블의 모든 (기존) 값이 채워진다는 것입니다. 고마워요! – msplants