在我的实体模型中,我有大量实体链接到创建它们的用户。这是一个简单的例子......
public partial class JobNote
{
public int Id { get; set; }
public int JobId { get; set; }
public string Note { get; set; }
public System.DateTime CreatedDate { get; set; }
public int UserId { get; set; }
public bool IsDeleted { get; set; }
public virtual Job Job { get; set; }
public virtual User User { get; set; }
}
我想通过 OData 端点公开 JobNotes,但我现在不想公开用户,因为它包含密码和哈希盐。
如果我只是edmxModelBuilder.EntitySet<EF.User>("Users")
从我的 OData 模型中删除该行,那么我将无法获取 JobNote 或与用户关联的任何其他对象。
如果我从我的实体框架模型中删除密码和盐属性,我将无法使用我的模型在应用程序的其他区域验证我的用户。我可能可以解决这个问题,但我认为它是最后的手段,而不是修复。
我正在考虑对 User 属性使用 HasNavigationPropertyLink 方法,但我还不太了解它是如何工作的。
编辑:好的,我已经创建了导航属性链接......
var noteConfig = edmxModelBuilder.EntitySet<EF.JobNote>("JobNotes");
IEdmModel edmxModel = edmxModelBuilder.GetEdmModel();
noteConfig.HasNavigationPropertyLink(
noteConfig.EntityType.NavigationProperties.Single(x => x.Name == "User"),
(entityContext, navigationProperty) =>
new Uri(entityContext.Url.ODataLink(
new EntitySetPathSegment("Users"),
new KeyValuePathSegment(entityContext.EntityInstance.Id.ToString()),
new NavigationPathSegment(navigationProperty.Name))),
false);
...但它给了我同样的问题。我想那是因为我在构建模型后更新了配置,但我无法重新构建和重新分配它。