c#MongoDB Repo引用的Delete(字符串id)函数不接受被传递的字符串DAO参数

时间:2016-10-17 18:38:57

标签: c# mongodb dao data-access-layer

我正在尝试在DAL EmployeeDAO中创建一个删除功能,如下所示:

public long Delete(string Id)
    {
        HelpdeskRepository repo = new HelpdeskRepository(new DbContext());
        long deleteFlag = 0;
        if (Id.Count() > 0)
        {
            repo.Delete(Id.GetIdAsString());
            deleteFlag = 1;
            return deleteFlag;// if found count = 1 == true
        }
        else
        {
            return deleteFlag;
        }
    }

但是,repo.Delete(Id.GetIdAsString());无效,给我错误

  

Cs1061   错误CS1061'字符串'不包含'GetIdAsString'的定义和>没有扩展方法'GetIdAsString'接受类型'string'>的第一个参数可以找到

它引用的Repository(repo)函数是:

public long Delete<HelpdeskEntity>(string id)
    {
        var filter = new FilterDefinitionBuilder<HelpdeskEntity>().Eq("Id", new ObjectId(id));
        var collection = GetCollection<HelpdeskEntity>();
        var deleteRes = collection.DeleteOne(filter);
        return deleteRes.DeletedCount;
    }

和GetIdAsString()函数:

public string GetIdAsString()
    {
        return this.Id.ToString();
    }

我不明白为什么Id参数在repo.Delete调用中也不起作用,因为Delete接受字符串参数而Id是string类型。

有任何想法或更好的方法来实现这一目标吗?由于将来依赖于存储库方法的项目要求,我无法使用Insert / async / await创建方法,因此必须使用repo.Delete函数来完成。

2 个答案:

答案 0 :(得分:0)

首先,您正在引用GetIsAsString(),就像它是一个扩展方法一样:

repo.Delete(Id.GetIdAsString());

如果你想让它成为一个扩展方法,它应该看起来像这样(在静态类中)

public static string GetIdAsString(this ObjectId id)
{
    return id.ToString();
}

否则,如果它与您的Id属性在同一个类中,则引用它:

repo.Delete(GetIdAsString());

但说实话,我不明白GetIdAsString()方法的目的。

在Id参数上调用它,它已经是一个字符串变量。

所以这应该有用

repo.Delete(Id);

另外,我认为你会想在这里引用_id,你不需要把它强制转换为ObjectId

var filter = new FilterDefinitionBuilder<HelpdeskEntity>().Eq("_id", id);

答案 1 :(得分:0)

请问您在哪里定义GetIdAsString()方法? Id中的Delete(string Id)已经是stringstring类没有扩展方法GetIdAsString(),因此会发生错误。

Delete<HelpdeskEntity>(string id)中,参数id已经是string,因此使用GetIdAsString()方法对我没有意义。只需使用repo.Delete(Id)