[英]c# Fluent nHibernate primary key is foreign key
我的數據庫布局如下所示:
Users
------------
|UserId | <-PK
|FirstName |
|LastName |
|MiddleName|
|Email |
------------
Admins
------------
|UserId | <-PK/FK to Users
------------
我只是希望能夠在Admins表中輸入唯一ID來指定該用戶是否為Admin。
這是我的Fluent nHibernate代碼:
public class Users
{
public virtual string UserId { get; set; }
public virtual string FirstName { get; set; }
....
}
public class UserMappings : ClassMap<Users>
{
public UserMappings()
{
Id(x => x.UserId).Column("UserId").Not.Nullable();
Map(x => x.FirstName).Column("FirstName").Not.Nullable();
Map(x => x.MiddleName).Column("MiddleName").Nullable();
....
}
}
public class Admins
{
public virtual Users User { get; set; }
}
public class AdminMappings : ClassMap<Admins>
{
public AdminMappings()
{
Id(x => x.User).GeneratedBy.Foreign("Users");
HasOne(x => x.User).Constrained();
}
}
不幸的是,當我跑步時,我收到此錯誤:
Could not determine type for: SMAC.Users, SMAC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, for columns: NHibernate.Mapping.Column(User)
我想要的是,如果我這樣做:
var admin;
admin.user <= instance of user to get name, email, etc...
我將如何實現這一目標?
編輯:我添加了這個,雖然我不知道它是否理想,但它讓它工作了:
public AdminMappings()
{
Id(x => x.UserId).Column("UserId");
HasOne(x => x.User).Constrained();
}
public UserMappings()
{
Id(x => x.UserId).Column("UserId").Not.Nullable();
Map(x => x.FirstName).Column("FirstName").Not.Nullable();
Map(x => x.MiddleName).Column("MiddleName").Nullable();
...
HasOne(x => x.Admin).Cascade.All();
}
public class Admins
{
public virtual string UserId { get; set; }
public virtual Users User { get; set; }
}
public class Users
{
public virtual string UserId { get; set; }
public virtual string FirstName { get; set; }
....
public virtual Admins Admin { get; set; }
}
唯一需要注意的是,我必須實際設置UserId和User才能保存Admin記錄,而不僅僅是UserId,並讓它自動為我提取用戶記錄。
NHibernate可以在主鍵中處理FK
public class AdminMappings : ClassMap<Admins>
{
public AdminMappings()
{
CompositeId().KeyReference(x => x.User, "UserId");
}
}
不要忘記在Admin上適當地使用equals和gethashcode來使用User.Id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.