C# 防止OData$extend行为返回实体
在我的实体模型中,有大量的实体链接到创建它们的用户。这里有一个简单的例子C# 防止OData$extend行为返回实体,c#,asp.net,odata,asp.net-web-api-odata,C#,Asp.net,Odata,Asp.net Web Api Odata,在我的实体模型中,有大量的实体链接到创建它们的用户。这里有一个简单的例子 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 { g
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(“用户”)
行,那么我就无法获取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);
var noteConfig=edmxModelBuilder.EntitySet(“作业注释”);
IEdmModel edmxModel=edmxModelBuilder.GetEdmModel();
noteConfig.HasNavigationPropertyLink(
noteConfig.EntityType.NavigationProperties.Single(x=>x.Name==“用户”),
(entityContext,navigationProperty)=>
新Uri(entityContext.Url.ODataLink)(
新EntitySetPathSegment(“用户”),
新的KeyValuePathSegment(entityContext.EntityInstance.Id.ToString()),
新的NavigationPathSegment(navigationProperty.Name)),
假);
。。。但它给了我同样的问题。我认为这是因为我在构建模型后正在更新配置,但我无法重新构建和分配它。我猜您不想从实体框架映射中删除te密码和salt。在edm模型映射中,您也可以忽略属性,因此它不会在odata中公开 modelBuilder.Entity().Ignore(u=>u.PasswordHash)
您也可以以同样的方式忽略整个用户属性我猜您不想从实体框架映射中删除te密码和salt。在edm模型映射中,您也可以忽略属性,因此它不会在odata中公开 modelBuilder.Entity().Ignore(u=>u.PasswordHash)
您也可以以同样的方式忽略整个用户属性我最终会将密码移动到另一个实体,并将用户“配置文件”信息与登录信息分开存储,但目前我无法这样做。我将尝试忽略,thanksI最终会将密码移动到另一个实体,并将用户“配置文件”信息与登录信息分开存储,但目前我无法做到这一点。我试试看,谢谢