我正在尝试使用NHibernate实现AspNet Identity的持久层,例如UserStore
等。
我有所有持久性类,即UserClaim
映射。但是当我尝试运行项目时,我收到的错误如下:
关联引用未映射的类: Core.AspNet.Identity.NHibernate.IdentityUserClaim
我怀疑这是因为我声明了public partial class Userclaim : IdentityUserClaim
,但是IdentityUserClaim
不应该有一个表,也许是某种空映射,但我只是不知道。
我当前的映射如下:
public partial class UserclaimMap : ClassMap<Userclaim>
{
public UserclaimMap()
{
Table("UserClaim");
Id(x => x.Id).Column("Id");
References(x => x.AgentUser).Column("UserId");
Map(x => x.DateCreated).Column("DateCreated").Not.Nullable();
Map(x => x.DateUpdated).Column("DateUpdated").Not.Nullable();
Map(x => x.ClaimType).Column("ClaimType").Not.Nullable();
Map(x => x.ClaimValue).Column("ClaimValue");
}
}
答案 0 :(得分:0)
我怀疑你的User类引用了这个类。你必须告诉他,它实际上是你的UserClaim类。
public UserMap()
{
HasMany<UserClaim>(x => x.Claims);
}
答案 1 :(得分:0)
你可以用,
AutoMap.AssemblyOf<Entity>()
.IgnoreBase<Entity>()
在会话工厂中忽略基类
参考: Fluent NHibernate: How to tell it not to map a base class
修改强>
我做了一个简短的测试,好像你没有超级类NHibernate的类映射实际上忽略它,我添加了以下类和映射
public class IdentityUserClaim
{
public virtual string Name { get; set; }
}
public class Userclaim : IdentityUserClaim
{
public virtual int Id { get; set; }
public virtual DateTime DateCreated { get; set; }
public virtual DateTime DateUpdated { get; set; }
public virtual string ClaimType { get; set; }
public virtual string ClaimValue { get; set; }
}
public partial class UserclaimMap : ClassMap<Userclaim>
{
public UserclaimMap()
{
Table("UserClaim");
Id(x => x.Id).Column("Id");
Map(x => x.DateCreated).Column("DateCreated").Not.Nullable();
Map(x => x.DateUpdated).Column("DateUpdated").Not.Nullable();
Map(x => x.ClaimType).Column("ClaimType").Not.Nullable();
Map(x => x.ClaimValue).Column("ClaimValue");
}
}
和会话工厂是,
private FluentConfiguration CreateConfiguration(IPersistenceConfigurer configurer)
{
return Fluently.Configure()
.Database(configurer)
.Cache(c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Userclaim>())
.ExposeConfiguration(x => x.SetInterceptor(new SqlStatementInterceptor()));
}
private IPersistenceConfigurer CreateTestDatabaseConfiguration()
{
return SQLiteConfiguration
.Standard
.InMemory()
.ShowSql();
}
所以看起来问题出现在其他一些映射中,可能是因为类映射引用了超类IdentityUserClaim而不是UserClaim。