使用来自WCF Web服务的模型

3

我不确定标题是否正确,但我会进一步解释。

目前我有两个网络应用程序;一个是ASP.NET MVC 5应用程序,另一个是WCF服务。 WCF服务是包含所有业务逻辑和数据访问层的服务。为了访问我的数据库,我使用Entity Framework 6。

我正在尝试创建一个控制器,通过MVC应用程序访问数据库中的某些数据。它应该具有常规CRUD操作以进行测试。我遇到的问题是,因为我的DAL在WCF服务中,所以我不断地将从服务检索的数据转换为模型在ASP.NET MVC应用程序中显示。

我的问题是:是否可以在我的WCF服务上使用EF生成的类作为ASP.NET MVC应用程序中的模型功能?

为了清晰起见,我添加了一些代码示例;

WCF EF生成对象

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

WCF Service

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

ASP.NET MVC Model

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: 添加了DataAnnotations。这实际上非常重要。

1
你可以考虑使用像automapper这样的工具来简化这个过程。 - user3559349
1
@StephenMuecke 我会研究一下,谢谢!不过,这仍然感觉更像是一个变通方法而不是一个解决方案。 - Dion V.
1个回答

2

您应该可以直接使用它作为模板,这样做没有问题。

另外,为了进行转换,您也可以使用Linq:

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

这种方式更加紧凑。

如果我直接使用它作为模型,我还能添加DataAnnotations吗?我在问题中忘记提到了这一点,这是我的错。我已经进行了编辑。你关于LINQ部分的想法是正确的!看起来很不错。 - Dion V.
是的。您只需要确保注释不会对其他部分产生不良影响。 - Carles Company

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接