Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止OData$extend行为返回实体_C#_Asp.net_Odata_Asp.net Web Api Odata - Fatal编程技术网

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最终会将密码移动到另一个实体,并将用户“配置文件”信息与登录信息分开存储,但目前我无法做到这一点。我试试看,谢谢