【问题标题】:How to implement Asp.net IdentityUser with breezejs NHibernate如何使用微风JS NHibernate 实现 Asp.net IdentityUser
【发布时间】:2014-03-24 11:47:15
【问题描述】:

我正在处理一个利用 Breezejs 和 NHibernate 的项目。我在我的实体模型中实现了 Asp.Net IdentityUser。 每当我尝试使用微风 NHContext 生成元数据、插入或更新我的模型时。总是抛出外键不匹配异常。请问,我如何在我的代码中使用 Fluent 映射来克服这个 NorthBreeze 限制

【问题讨论】:

  • 您使用的是NHibernate.AspNet.Identity 包吗? this SO post提到的问题你解决了吗?您能否提供有关发生的异常的更多信息?
  • 总是抛出这个异常:找不到匹配的 fk for property NHibernate.Identity.IdentityUserClaim.User

标签: fluent-nhibernate nhibernate-mapping breeze


【解决方案1】:

当使用 NHibernate 和 Breeze 时,外键必须映射到实体类的属性。这样外键就可以在客户端上使用。对于 IdentityUserClaim 实体,您需要这样的东西:

public class IdentityUserClaim : EntityWithTypedId<int>
{
    public virtual string ClaimType { get; set; }
    public virtual string ClaimValue { get; set; }
    public virtual IdentityUser User { get; set; }

    // foreign key property
    public virtual int UserId { get; set; } 
}

public class IdentityUserClaimMap : ClassMapping<IdentityUserClaim>
{
    public IdentityUserClaimMap()
    {
        Table("AspNetUserClaims");
        Id(x => x.Id, m => m.Generator(Generators.Identity));
        Property(x => x.ClaimType);
        Property(x => x.ClaimValue);
        ManyToOne(x => x.User, m => m.Column("User_Id"));

        // foreign key mapping
        Property(x = x.UserId).Column("User_Id").Not.Insert().Not.Update();
    }
}

注意外键映射到insert=falseupdate=false。 User_Id 列的更新通过正常的 NHirate 流程(即它们由相关的用户实体控制)。 UserId 属性仅用于向 Breeze 公开外键值。

【讨论】:

  • 史蒂夫感谢您抽出宝贵时间,但我仍在努力解决这个问题。我正在使用 NHibernate.Identity 库,它具有类似的实现,但不完全是上面的方式。您是否建议我应该实现我自己的 UserStore 或调整 NHibernate.Identity 以具有与上面编写的相同的实现。请我需要你的帮助。我试图调整图书馆,但仍然很难。
  • 哇!非常感谢史蒂夫。我从nhibernateidentity.codeplex.com/SourceControl/latest 下载了源代码,这让我很容易编辑。现在可以使用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2018-05-13
  • 2015-08-16
  • 1970-01-01
  • 2013-09-01
相关资源
最近更新 更多