C# 创建Web API 2的良好实践&;基于EF的系统

C# 创建Web API 2的良好实践&;基于EF的系统,c#,entity-framework,asp.net-web-api2,C#,Entity Framework,Asp.net Web Api2,我正在创建一个基于实体框架的WebAPI2应用程序。我的问题是关于创建基于Web API 2和EF的系统所涉及的良好实践 假设我有类付款包含类地址 public class Payment() { public string Id { get; set; } public string Name { get; set; } public decimal Amount { get; set; } public Address PaymentAddress{ get;

我正在创建一个基于实体框架的WebAPI2应用程序。我的问题是关于创建基于Web API 2和EF的系统所涉及的良好实践

假设我有类
付款
包含类
地址

public class Payment()
{
    public string Id { get; set; }
    public string Name { get; set; }
    public decimal Amount { get; set; }
    public Address PaymentAddress{ get; set; }
}

public class Address ()
{
    public string StreetName{ get; set; }
    public string City{ get; set; }
}
问题1:

我的Web API是否应该允许从端点PUT/payments更改
地址
(我的意思是更改
地址
的属性而不是整个对象),称为解决方案1

问题2:

或者,看跌/付款应该只更新
付款
的简单属性,而不更新
地址
属性?在这个场景中,
地址
属性可以通过端点PUT/payments/{paymentId}/Address(称为解决方案2)来更改吗

问题3:

目前,我已经实现了解决方案1,但我无法为更新了
地址
属性的
支付
更新正确设置上下文。我必须手动更改
地址的EF状态值
。如果解决方案2能解决我的问题

问题4

默认情况下,会自动定义EF一对多关系,如我的示例中所示。但我可以使用ForeignKey属性标记列作为外键。为什么这个解决方案更好?他有什么帮助吗

public class Payment()
{
    public string Id { get; set; }
    public string Name { get; set; }
    public decimal Amount { get; set; }

    public int AddressId{ get; set; }
    [ForeignKey("AddressId")]
    public Address PaymentAddress{ get; set; }
}

如果是多个问题,你可能会得到更好的回答。如果是多个问题,你可能会得到更好的回答。