我正在使用一个利用Breezejs和NHibernate的项目。我在我的实体模型中实现了Asp.Net IdentityUser。 任何时候我尝试使用breeze NHContext生成metedata,插入或更新我的模型。总是抛出外键不匹配的异常。请问,我如何在我的代码中使用Fluent映射来克服NorthBreeze限制
答案 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=false
和update=false
对齐。对User_Id列的更新将通过正常的NHiberate流(即它们由相关的用户实体控制)。 UserId属性仅用于将外键值公开给Breeze。