Конвертация и возврат списка в WCF - PullRequest
0 голосов
/ 26 апреля 2011

привет друзья Я работаю в WCF с прошлой недели. Я написал несколько примеров, он содержит 2 уровня: бизнес-уровень и DAL-уровень. Я хочу отправить список и хочу вернуть список.

Вот код проверки исправления ошибок.

IEmployee.cs

 [OperationContract]
 List<outEmployee> CreateEmployeeDetails(inemployee InsertEmployee);

 [DataContract]
 public class inemployee
 {
    public string EmployeeID { get; set; }
    public string EmployeeName { get; set; }    
 }

 public class outEmailTemplate
 {
    public string EmployeeID { get; set; }
    public string EmployeeName { get; set; }
 }

Employee.svc.cs

 public List<outEmployee> CreateEmployeeDetails(inemployee InsertEmployee)
 {
    EmployeeDac emp = new EmployeeDac();
    return emp.InsertEmployeeDetails(InsertEmployee);
 }

EmployeeDac.cs

public List<outEmployee> InsertEmailTemplate(inEmployee InsertEmp)
{
    SqlConnection con = new SqlConnection(connectionstring);
    SqlCommand cmd;
    cmd = new SqlCommand("SP_InsertEmployee", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("employeename", SqlDbType.VarChar).Value = InsertEmp.Employeename;
    con.Open();
    string id = (string)cmd.ExecuteScalar();
    con.Close();
    List<inemployee> oet = new List<inemployee>();
    oet.Add(id);
    return oet;
 }

Может кто-нибудь исправить ошибки и переписать код.

Здесь я хочу вернуть список пользовательскому интерфейсу (silverlight).

1 Ответ

1 голос
/ 26 апреля 2011

Несколько проблем:

1) ваши контракты с данными неполны - вам необходимо в первую очередь украсить все классы, используемые в ваших методах обслуживания (для входных параметров и ! ) с [DataContract], и вы также должны украсить все элементы для сериализации с помощью [DataMember]:

    [DataContract]
    public class inemployee
    {
       [DataMember]
       public string EmployeeID { get; set; }
       [DataMember]
       public string EmployeeName { get; set; }    
    }

    [DataContract]
    public class outemployee
    {
       [DataMember]
       public string EmployeeID { get; set; }
       [DataMember]
       public string EmployeeName { get; set; }
    }

Кстати: почему у вас есть два отдельных типа - inemployee и outemployee ?? Разве одного типа Employee не хватит ??

2) Ваш уровень DAL должен включать лучшие практики: оберните ваши SqlConnection и SqlCommand в использование блоков; для вашего VARCHAR параметра всегда задайте длину! и больше всего: если вы хотите вернуть List<outemployee>, вам нужно создать список outemployee, а не inemployee!

И в завершение: вы получаете id типа string и пытаетесь добавить это string к List<outemployee> - это никогда не будет работать курс! Учитывая id, вам нужно создать экземпляр outemployee и добавить , который в список.

    public List<outEmployee> InsertEmailTemplate(inEmployee InsertEmp)
    {
        using(SqlConnection con = new SqlConnection(connectionstring))
        using(SqlCommand cmd = new SqlCommand("SP_InsertEmployee", con))
        {
           cmd.CommandType = CommandType.StoredProcedure;
           cmd.Parameters.Add("employeename", SqlDbType.VarChar, 100).Value = InsertEmp.Employeename;

           con.Open();
           string id = (string)cmd.ExecuteScalar();
           con.Close();
        }

        // you want to return outemployee - 
        // so you need to create an outemployee!
        List<outemployee> oet = new List<outemployee>(); 

        // create a new instance of an "outemployee"
        outemployee emp = new outemployee();

        // set the EmployeeID property of the "outemployee" to "id"
        emp.EmployeeID = id;

        // add new "outemployee" to list
        oet.Add(emp);

        return oet;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...