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 を公開したいのですが、パスワードとハッシュ ソルトが含まれているため、現時点ではユーザーを公開したくありません。

OData モデルから行を削除しただけedmxModelBuilder.EntitySet<EF.User>("Users")では、ユーザーに関連付けられている 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 に答える