如何使用breezejs NHibernate实现Asp.net IdentityUser

时间:2014-03-21 00:06:19

标签: fluent-nhibernate nhibernate-mapping breeze

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

1 个答案:

答案 0 :(得分:0)

将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列的更新将通过正常的NHiberate流(即它们由相关的用户实体控制)。 UserId属性仅用于将外键值公开给Breeze。