Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Get方法专门用于处理0值_C#_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# Get方法专门用于处理0值

C# Get方法专门用于处理0值,c#,entity-framework,asp.net-web-api,C#,Entity Framework,Asp.net Web Api,在我的WebAPI控制器方法中,我有 public IHttpActionResult GetMember(int id) { Member member = db.Members.Find(id); if (member == null) { return NotFound(); } return Ok(member); } 基本上,如果没有id=0的当前成员,它会在这

在我的WebAPI控制器方法中,我有

public IHttpActionResult GetMember(int id)
    {
        Member member = db.Members.Find(id);
        if (member == null)
        {
            return NotFound();
        }


        return Ok(member);
    }
基本上,如果没有id=0的当前成员,它会在这里进行检查,返回NotFound。。。这就是UI正在接收的内容

场景是,对于0值,API应该提供一个具有良好默认值的新项。有没有关于如何实现这一点的示例

我想出了这个办法,但没能让它正常工作

public IHttpActionResult GetMember(int id)
    {
        Member member = db.Members.Find(id);
        if (id > 0)
        {
            var members = db.Members.Find();
            member = members.FirstOrDefault((m) => m.MemberId == id);
            //return NotFound();

            if (member == null)
            {
                return NotFound();
            }
            else
            {
               db.Members.Add(member);
                db.SaveChanges();

            }
            return Ok(member);
        }
    }

只需初始化一个新成员对象并将其返回给调用方法

public IHttpActionResult GetMember(int id)
{
    Member member = new Member();
    if (id > 0)
    {
        var members = db.Members.Find();
        member = members.FirstOrDefault((m) => m.MemberId == id);
    }
    else
    {
        // Set some values if you need Ok(new Member { MemberId = 0, FirstName = "New"} )
    }

    return Ok(member);
}

只需初始化一个新成员对象并将其返回给调用方法

public IHttpActionResult GetMember(int id)
{
    Member member = new Member();
    if (id > 0)
    {
        var members = db.Members.Find();
        member = members.FirstOrDefault((m) => m.MemberId == id);
    }
    else
    {
        // Set some values if you need Ok(new Member { MemberId = 0, FirstName = "New"} )
    }

    return Ok(member);
}

我不确定我是否理解目标,但如果我理解正确,可能会这样做:

public IHttpActionResult GetMember(int id)
{
    Member member = db.Members.Find(id);
    if (member == null)
    {
        if (id != 0)
        {
            member = new Member();
        }
        else
        {
            return NotFound();
        }
    }
    return Ok(member);
}

这就是你想要的吗?

我不确定我是否理解目标,但如果我理解正确,这可能就行了:

public IHttpActionResult GetMember(int id)
{
    Member member = db.Members.Find(id);
    if (member == null)
    {
        if (id != 0)
        {
            member = new Member();
        }
        else
        {
            return NotFound();
        }
    }
    return Ok(member);
}
public IHttpActionResult GetMember(int id)
{
    Member member = null; 

    if(id == 0)
    {
        member = new Member();
        // Set default member values here
        // member.MemberId = 123456;
        // member.Name = "My Name";
        // set other default property values.......

        // Depending on why you are calling this method w/ a '0', you may or may not want to execute these next two lines.  It's up to you.
        db.Members.Add(member);
        db.SaveChanges();  
    }
    else
    {
        member = db.Members.Where(m => m.MemberId == id).FirstOrDefault();
    }

    if (member == null)
        return NotFound();

    return Ok(member);
}

这就是您想要的吗?

以下是此代码所基于的原始代码:

public IHttpActionResult GetMember(int id)
{
    Member member = null; 

    if(id == 0)
    {
        member = new Member();
        // Set default member values here
        // member.MemberId = 123456;
        // member.Name = "My Name";
        // set other default property values.......

        // Depending on why you are calling this method w/ a '0', you may or may not want to execute these next two lines.  It's up to you.
        db.Members.Add(member);
        db.SaveChanges();  
    }
    else
    {
        member = db.Members.Where(m => m.MemberId == id).FirstOrDefault();
    }

    if (member == null)
        return NotFound();

    return Ok(member);
}
        public IHttpActionResult Get(int id)
    {
        try
        {
            Product product;
            var productRepository = new ProductRepository();

            if (id > 0)
            {
                var products = productRepository.Retrieve();
                product = products.FirstOrDefault(p => p.ProductId == id);
                if (product == null)
                {
                    return NotFound();
                }
            }
            else
            {
                product = productRepository.Create();
            }
            return Ok(product);
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }
要求从产品更改为成员,并包括EF

考虑保留对存储库的使用,并在存储库类中而不是在此处添加EF代码。
还考虑将一个重载添加到将获取ID并定位所需成员的存储库检索方法中。然后可以在此处删除对FirstOrDefault的调用。

以下是此代码所基于的原始代码:

        public IHttpActionResult Get(int id)
    {
        try
        {
            Product product;
            var productRepository = new ProductRepository();

            if (id > 0)
            {
                var products = productRepository.Retrieve();
                product = products.FirstOrDefault(p => p.ProductId == id);
                if (product == null)
                {
                    return NotFound();
                }
            }
            else
            {
                product = productRepository.Create();
            }
            return Ok(product);
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }
要求从产品更改为成员,并包括EF

考虑保留对存储库的使用,并在存储库类中而不是在此处添加EF代码。

还考虑将一个重载添加到将获取ID并定位所需成员的存储库检索方法中。然后您可以在此处取消对FirstOrDefault的调用。

我无法理解您的问题。您是说如果使用id值“0”调用GetMember(…),我们应该返回一个新的默认成员对象吗?但是,如果使用0以外的内容调用GetMember(…)方法,我们应该尝试在db.Members集合中找到相应的成员并返回它?如果找不到它,那么它应该返回“NotFound()”?因此您希望控制器创建一个新的
成员
对象,并在
成员
为空时将其作为记录插入数据库?问题到处都是,实际上,你试图实现自己想要的东西并没有提供任何洞察。很难理解你到底想要什么。很抱歉给你带来困惑。我发现很难解释我的问题。是的,你们两位所解释的正是我想要达到的。我很难理解你们的问题。您是说如果使用id值“0”调用GetMember(…),我们应该返回一个新的默认成员对象吗?但是,如果使用0以外的内容调用GetMember(…)方法,我们应该尝试在db.Members集合中找到相应的成员并返回它?如果找不到它,那么它应该返回“NotFound()”?因此您希望控制器创建一个新的
成员
对象,并在
成员
为空时将其作为记录插入数据库?问题到处都是,实际上,你试图实现自己想要的东西并没有提供任何洞察。很难理解你到底想要什么。很抱歉给你带来困惑。我发现很难解释我的问题。是的,你们两位所解释的正是我想要实现的。你们不想立即保存默认用户,这会在用户打开添加屏幕时在数据库中创建一个新成员(至少我猜这就是这个调用的用途)。OP希望显示添加成员屏幕,其中包含注册的默认值或其他内容。我同意您的看法,他们可能不希望立即保存到DB,但这是在他们最初的尝试中发生的,因此我将其包含在流中。但是,您的警告是正确的,在创建默认值后立即添加它。。。您不希望数据库中有数千个从未实际使用过的用户。您不希望立即保存默认用户,这将在用户打开“添加”屏幕时在数据库中创建新成员(至少我猜这就是此调用的用途)。OP希望显示添加成员屏幕,其中包含注册的默认值或其他内容。我同意您的看法,他们可能不希望立即保存到DB,但这是在他们最初的尝试中发生的,因此我将其包含在流中。但是,您的警告是正确的,在创建默认值后立即添加它。。。您不希望成千上万的用户最终进入您的数据库,而这些用户从未实际使用过。@CodeCaster,您可能是对的。我据此编辑了答案。@CodeCaster,你可能是对的。我相应地编辑了答案。“或者将其添加到数据库并获取成员”请参见我的,您可能不想这样做,这取决于使用id=0调用此方法的原因。@CodeCaster,我完全同意,将其添加到数据库不是一个好主意。不确定上面的代码示例为什么要执行两次查找?建议:删除查找的第一个调用,而只声明成员变量。那么,只有当id>0时,才值得进行传递id的查找。如果查找随后找到该项,则不需要FirstOrDefault方法?@DeborahK有一个很好的建议。我使用了提交者所拥有的,只是做了一个小小的更改,您需要我更新我的答案吗?“或者添加到数据库中,让成员“查看我的,您可能不想这样做,这取决于为什么使用id=0调用此方法。@CodeCaster,我完全同意,将其添加到数据库中不是一个好主意。不确定上面的代码示例为什么要执行两次查找?建议:删除查找的第一个调用,而只声明成员变量。那么,只有当id>0时,才值得进行传递id的查找。如果查找随后找到该项,则不需要FirstOrDefault方法?@DeborahK有一个很好的建议。我用了什么