在我的实体模型中,我有大量实体链接到创建它们的用户。这是一个简单的例子......
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,但我不希望此时公开用户,因为它包含密码和哈希盐。
如果我只是从我的OData模型中删除edmxModelBuilder.EntitySet<EF.User>("Users")
行,那么我就无法获得JobNote或与用户关联的任何其他对象。
如果我从实体框架模型中删除密码和salt属性,我无法使用我的模型在应用程序的其他区域验证我的用户。我可以解决这个问题,但我认为这是最后的手段,而不是修复。
我正在考虑为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);
......但它给了我同样的问题。我认为这是因为我在构建模型后更新了配置,但我无法重新构建并重新分配它。
答案 0 :(得分:1)
我猜你不想从实体框架映射中删除te密码和salt。在edm模型映射中,您也可以忽略属性,因此它不会在odata中公开。
modelBuilder.Entity()。忽略(u =&gt; u.PasswordHash);
您也可以以相同的方式忽略整个用户属性