2015-03-13 4 views
3

Не совсем уверен, правилен ли заголовок, но я объясню это дальше.Использование модели из WCF WebService

На данный момент у меня есть два веб-приложения; один из которых является приложением ASP.NET MVC 5, а один - службой WCF. Служба WCF - это служба, содержащая всю бизнес-логику и уровень доступа к данным. Для доступа к моей базе данных я использую Entity Framework 6.

Я пытаюсь создать контроллер для доступа к некоторым данным в базе данных через приложение MVC. Он должен иметь регулярные операции CRUD для целей тестирования. Проблема, с которой я столкнулся, заключается в том, что, поскольку мой DAL находится в службе WCF, я постоянно должен отбирать извлеченные данные из службы в модель в моем приложении ASP.NET MVC для ее отображения.

Мой вопрос: возможно ли использовать классы, созданные EF, в моей службе WCF для работы в качестве модели в моем приложении ASP.NET MVC?

Для ясности я добавил несколько примеров;

WCF EF-объекта генерируется

public class WCFPerson 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

службы WCF

[WebMethod] 
public List<WCFPerson> GetAllPersons() 
{ 
    using (var db = new SomeDbcontext()) 
    { 
     return db.WCFPersons.ToList(); 
    } 
} 

ASP.NET MVC Модель

public class Person 
{ 
    [Required] 
    public string Name { get; set; } 

    [Required, RegularExpression("([0-9]+)")] 
    public int Age { get; set; } 
} 

ASP.NET MVC контроллер

public class PersonController : Controller 
{ 
    private WCFService.WebServiceClient client = new WCFService.WebServiceClient(); 

    public ActionResult Index() 
    { 
     var persons = client.GetAllPersons(); 
     var model = new List<Person>(); 

     //My problem: 
     foreach (var person in persons) 
     { 
      model.Add(new Person() { Name = person.Name, Age = person.Age }); 
     } 

     return View(model); 
    } 
} 

Я нахожу это литье очень раздражает. Представьте сценарий изменения базы данных, сказал Нуфф. Кроме того, этот пример невелик - моя текущая модель имеет около 15 свойств, и очень раздражает бросать их все.

Невозможно установить соединение с базой данных непосредственно в приложении MVC. Он должен быть в службе WCF по определенным причинам. Если бы это было возможно, я бы уже сделал это.

Редактировать 1: Added DataNnotations. Это на самом деле очень важно.

+1

Вы можете посмотреть на использование таких инструментов, как [automapper] (https://github.com/AutoMapper/AutoMapper), чтобы сделать это проще. –

+1

@ StephenMuecke Посмотрите на это, спасибо! Тем не менее, это скорее похоже на обходное решение, чем решение. –

ответ

1

Вы должны иметь возможность использовать его непосредственно в качестве модели. Это не проблема.

Другое дело, чтобы сделать преобразование можно также использовать Linq:

model=persons.Select(t=>new Person{ 
          Name=t.Name, 
          Age=t.Age 
          }); 

Этот способ является более компактным.

+0

Если я использую его непосредственно в качестве модели, могу ли я добавить к нему DataAnnotations? Забыл упомянуть, что в вопросе, который является моим плохим. Я отредактировал его. Вы правы в части LINQ! Выглядит твердо. –

+0

Да. Вам просто нужно убедиться, что аннотации не имеют нежелательных эффектов для другой части. –

Смежные вопросы