我是 EF 和 AutoMapper 的新手,我正在尝试使用它来创建 Web 服务。如果我尝试直接序列化 EF 实体,导航属性会抛出错误,因为它们无法被序列化。我想找到一种方法来抑制它们,我被告知最好的方法是创建 POCO 以用作数据传输对象。
(此时我想我不妨使用 ADO.NET 编写自己的 DTO——EF 不应该为我省去编写自己的类的麻烦吗?)
我已经向我推荐了 AutoMapper,作为一种将 EF 实体自动映射到 POCO 的方法,因此我尝试在以下过程中使用它,该过程会加载 POCO:
Public Sub Load(ByVal lngUserId As Long)
Dim query = From u In db.Users
Where u.UserID = lngUserId
Select u
AutoMapper.Mapper.Map(query.FirstOrDefault(), Me)
End Sub
问题是,它出现了一个与导航属性相关的错误,它似乎不会被 AutoMapper 自动忽略。
因此,我尝试添加此行以强制 AutoMapper 忽略 nav 属性:
Dim oMap = Mapper.CreateMap(Of User, UserDto).ForSourceMember(Sub(src) src.tblUserFarms, Sub(opt) opt.Ignore())
(tblUserFarms 是导航属性)
我从找到的 C# 示例中转换了它的语法,但似乎 .ForSourceMember 的第一个参数不应该是 Lambda 表达式,而且我找不到应该如何使用它的好例子。
我是在使用正确的方法,还是应该完全尝试其他方法?我是否应该简单地删除所有导航属性以解决问题并失去它们的好处?EF 甚至是适合这项工作的工具吗?