1

在我的实体模型中,我有大量实体链接到创建它们的用户。这是一个简单的例子......

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);

...但它给了我同样的问题。我想那是因为我在构建模型后更新了配置,但我无法重新构建和重新分配它。

4

1 回答 1

1

我猜你不想从实体框架映射中删除密码和盐。在 edm 模型映射中,您也可以忽略属性,因此它不会在 odata 中公开。

modelBuilder.Entity().Ignore(u => u.PasswordHash);

您也可以以相同的方式忽略整个用户属性

于 2013-12-11T22:21:49.710 回答