使用POCO

时间:2015-08-22 12:57:02

标签: c# forms mongodb poco

我希望能够在使用POCO时将Windows Form与MongoDB一起使用,主要是因为在字符串文字中很容易从MongoDB获取值。我遇到的唯一问题是POCO将Windows窗体中的空白条目作为空白字符串(""),因此当使用InsertOneAsync()时,我会看到带有值的字段&# 34;&#34 ;.

这通常不可取,主要是因为:

  1. 占用了集合中的空间,
  2. 我想使用Windows窗体本身进行查询。如果查询具有"",则在Mongo文档中的一个字段中,它不是"" (非空字符串),然后它将不返回任何内容,因为字符串不匹配。
  3. 下面是我将文档从Windows Form导入MongoDB的代码..我还有其他一些问题:

    • 使用" null"只需创建一个值为null的字段。我的目标只是不创造这个领域。
    • 我为ZIP编写的代码转换了" null"到" 0"。我想改变这一点,因此当窗体表格输入为空白时它就不会进入该字段。

          var person = new Person
          {
              lastName = textBox1.Text.ToUpper(),
              firstName = textBox8.Text.ToUpper(),
              address = new Address
              {
                  streetAddress = textBox4.Text.ToUpper(),
                  city = textBox5.Text.ToUpper(),
                  state = comboBox1.Text.ToUpper(),
                  ZIP = Convert.ToInt32(string.IsNullOrEmpty(textBox7.Text) ? null : textBox7.Text)
              }
          };
      
          var client = new MongoClient();
          var database = client.GetDatabase("dataBase");
          var col = database.GetCollection<Person>("addressBook");
      
          await col.InsertOneAsync(person);
      

    P.S。这是我在这里的第一个问题,所以如果我没有提供足够的信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

因此,经过一番小小的灵魂搜索,似乎POCO并不适合多场请求。

发出请求的最佳方式是使用BsonDocument泛型类型,然后将找到的文档转换为泛型类型&#34; person&#34;。示例代码发布在此处:

var doc = new BsonDocument(); // Creating a filter for me in BSON

var lastName = textBox1.Text;
if (lastName != "") // Is my string in the Windows Form empty?
    doc.Add("lastName", lastName); // If not, add me to the filter.

var firstName = textBox8.Text;
if (firstName != "")
    doc.Add("firstName", firstName);

如果字符串文字不为空,则将字段及其对应的值添加到将用作过滤器的BsonDocument。

var doc = await colBson.Find(filter).FirstOrDefaultAsync();
// Find me, but as a BSON document.

然后找到该文档作为BsonDocument。

var person = BsonSerializer.Deserialize<Person>(doc);
// Convert me into a <Person> generic type.

从这里你可以按照自己的意愿去做一个&#34; Person&#34;打字课。

如果我不清楚任何事情,请告诉我。