1

ここで簡単な解決策が欠けていると思います。IQueryable を返す select (IQueryable で Linq スタイルを使用) を実行すると、挿入で使用するものとは異なる形式のキー/値を MyClass に返してもらいたい場合があります。

以下の UploadFile クラスを例として考え、プロパティ id と Filetimestamp に注意してください。Filetimestamp を設定すると、DateTime として保存されますが、IQueryable を取得するときは次のようにします。

  1. Filetimestamp が文字列 OR として返されるのを参照してください
  2. Filetimestamp.toString() を反映した String として返される別のプロパティを参照してください。このプロパティには、データベースに対応するキーがありません。これは、BSON からの実際のキー/値の単なる装飾です。

#1 はありそうもないと思ったので、Filetimestamp.toString() を返す取得専用フィールド Filetimestamp_str を追加することで #2 を追求しました。選択すると、動作は期待どおりです。挿入すると、失敗が見られます。

get に使用するデコレータ クラスを作成することもできますが、すべてが機能します。

public class UploadFile : IUploadFile
{
    public Object _id { get; set; }
    public String Filepath { get; set; }
    public String Filename { get; set; }
    public String Filetype { get; set; }
    public String Fileauthor { get; set; }
    public DateTime Filetimestamp { get; set; }
    public Object FileID { get; set; }

    // these keys are not in DB 
    public String Filetimestamp_str { get { return Filetimestamp.ToString(); } } 
    public String _id_str { get { return _id.ToString();  } }
}
4

1 に答える 1

0

BsonClassMapを作成して、シリアル化する(しない)プロパティを指定できます。シリアル化チュートリアルを参照してください。ただし、そのチュートリアルによると、読み取り専用プロパティは自動マッピングされるべきではないため、挿入時にエラーが発生することはありません。

于 2012-09-08T20:29:32.653 に答える