我有一個DocumentDb
數據庫的存儲庫。我的文檔都有一組共同屬性,所以所有文檔都實現了IDocumentEntity接口。是否有可能在C#中有額外的(忽略)屬性?
public interface IDocumentEntity {
[JsonProperty("id")]
Guid Id { get; set; }
[JsonProperty("documentClassification")]
DocumentClassification DocumentClassification { get; set; }
}
public class KnownDocument : IDocumentEntity {
[JsonProperty("id")]
Guid Id { get; set; }
[JsonProperty("documentClassification")]
DocumentClassification DocumentClassification { get; set; }
[JsonProperty("knownProperty")]
string KnownProperty { get; set; }
}
public class BaseDocumentRepository<T> where T : IDocumentEntity {
public Set(T entity) {
// ... stuff
}
}
這工作正常與KnownDocument
我知道所有的屬性。但是,當然,對於一個Document Db來說最棒的是我不需要知道所有的屬性(並且在很多情況下我不會)。
所以我的客戶端提交有點像這個 -
{unknownProperty1: 1, unknownProperty2: 2}
而且我想這UPSERT使用我的文檔庫。
public OtherDocumentService() {
_otherDocumentService = new OtherDocumentRepository();
}
public UpsertDocument(dynamic entity) {
entity.id = new Guid();
entity.documentClassification = DocumentClassification.Other;
_otherDocumentRepository.Set(entity);
}
,但我得到一個InvalidCastException從dynamic
到IDocumentEntity
。我認爲這是因爲動態對象上存在的額外屬性,但不在IDocumentEntity
接口上?
我想要做的事情是讓我的文檔實體處於動態狀態,但依靠一些屬性來維護它們。
這是不幸的,但似乎是它必須要走的路 –