【问题标题】:Storing WCF rest request data with SQL Server stored procedure使用 SQL Server 存储过程存储 WCF 休息请求数据
【发布时间】:2015-05-08 15:54:32
【问题描述】:

我的 WCF 服务中有一个简单的接口,其中一种方法可以获取 myRequest 参数

public interface IService
{
    [OperationContract]
    string MyOperation(myRequest request);
}

当我从客户端发布数据时,内容类型为application/json,因此请求正文会自动反序列化为myRequest 对象。

myRequest 是 WCF DataContract:

[DataContract]
public class myRequest
{
    string id;
    string name;
    List<Phone> phones

    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string ID { get; set; }
    [DataMember]
    public List<Phone> Phones { get; set; }
}

还有Phone 类

public class Phone
{
    public string Number { get; set; }
    public string Type { get; set; }

    public override string ToString()
    {
        return "[" + Number + "," + Type + "]";
    }
}

好的,现在我想将请求数据存储到我的本地 SQL Server 数据库中,为此我需要使用存储过程。我想将 myRequest 对象发送到 SQL Server 并让它处理插入/更新(我想我必须保留 2 个表:人员和电话)。

我没有太多关于存储过程的背景知识,但我很乐意从你们那里得到解决这个问题的正确方法。

谢谢。

【问题讨论】:

    标签: .net sql-server sqlclr


    【解决方案1】:

    您无法将复杂的对象传递给数据库,无论您使用的是 CLR 存储过程、旧的普通存储过程还是其他东西。

    您需要将您的请求转换为可以传递给数据库的东西。如果您知道如何在 T-Sql 中操作 XML(这可能有点棘手),那么 XML 序列化是该工作的理想选择。

    我认为放弃使用存储过程的想法并拥抱其他东西(如 EF)对你来说会更好。

    【讨论】:

    • 感谢您的快速回答。我找到了本教程codeproject.com/Tips/739164/… 似乎我可以将 EF 与存储过程一起使用(用于更复杂的对多个表的插入)。
    • 是的,EF 支持存储过程。但是只涉及 2 张桌子(而且 - 而且 - 有这么简单的桌子),我不会接受它。可能还有其他您没有提及的具体原因?
    • 不是真的,我认为 EF 会完成这项工作.. 但还有另一个问题.. 当我尝试在服务中使用 EF 时(将联系人存储到数据库中).. 客户端得到400 bad request.. 我有可能必须将服务部署到 IIS 吗?如果确实会出现问题,因为我不希望客户端依赖于 IIS 服务器
    • 我认为这是另一个 SO 问题的材料
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多