在Dbfield上设置Null值

时间:2018-01-23 06:43:24

标签: c# sitecore nunit

  public void Testing_Code()
    {
        var implementationTypeId = Sitecore.Data.ID.NewID;
        using (Sitecore.FakeDb.Db db = new Sitecore.FakeDb.Db
        {
           new Sitecore.FakeDb.DbItem("TestingInstanceItem")
            {
              new Sitecore.FakeDb.DbField(Templates.sampleTemplates.Fields.countryName){ Value=null }     
        })
     ......................

在上面的测试代码中,我将countryName字段分配给Null.But当执行它时将空值作为空字符串。在引用它的存储库中,

testingModel.countryName= testingModelItem.Fields[Templates.sampleTemplates.Fields.countryName] != null ?
                                                    testingModelItem.Fields[Templates.sampleTemplates.Fields.countryName].Value : string.Empty;

以下行应为false。但它显示为true

testingModelItem.Fields[Templates.sampleTemplates.Fields.countryName] != null 

2 个答案:

答案 0 :(得分:0)

替换此

new Sitecore.FakeDb.DbField(Templates.sampleTemplates.Fields.countryName){ Value=null } 

用这个

new Sitecore.FakeDb.DbField(Templates.sampleTemplates.Fields.countryName){ Value=DBNull.Value }  

而不是!= null(针对数据库的每个测试) 做

if (! DBNull.Value.Equals(testingModelItem.Fields[Templates.sampleTemplates.Fields.countryName])) 
     {
      //not null
      }
      else
      {
      //null
      }

答案 1 :(得分:0)

首先,您发布的代码确实返回字段而不是Sitecore.Data.Fields.Field类的实例而不是{{1} }):

string

仅当模板中没有此类字段时,它才能为testingModelItem.Fields[Templates.sampleTemplates.Fields.countryName] 。如果您想获得字段值,则应使用

null

中学,从字段中获取testingModelItem.Fields[Templates.sampleTemplates.Fields.countryName]?.Value 值是不可能的(至少8.0+)。 (非常)旧版本可能但现在null属性用空字符串替换Value

null