我有一個問題與流利NHibernate的地方automapping不拿起我的web項目DLL中的實體。通常我將所有實體存儲在一個單獨的程序集中,並且一直運行。然而,這個項目很小,所以我試圖把它全部保存在一個項目中。但是,當我撥打AutoMap.AssemblyOf<MyEntityType>()
時,不會創建映射。我想知道這是否是因爲實體存在於從Temporary ASP.NET文件夾加載的Web項目程序集中,而不是項目駐留在磁盤上的實際文件夾。它是一個權限問題或什麼?我不知道從哪裏開始調試......流利NHibernate的自動映射不工作
例實體:
namespace MyProject.Entities
{
public class Letter : EntityBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Company { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string Country { get; set; }
public string Interest { get; set; }
public string Section1 { get; set; }
public string Section2 { get; set; }
public string Section3 { get; set; }
public string LetterText { get; set; }
public int StepNumber { get; set; }
}
}
相關的自舉代碼:
private static ISessionFactory GetSessionFactory()
{
var database = MsSqlConfiguration.MsSql2005
.ConnectionString(Configuration.ConnectionString)
.DefaultSchema(DEFAULT_SCHEMA)
.AdoNetBatchSize(BATCH_SIZE);
var mappings = AutoMap.AssemblyOf<Letter>()
.Where(x => x.GetType() == typeof(Letter))
.Conventions.Add
(
ConventionBuilder.Id.Always(x =>
x.GeneratedBy.HiLo(HILO_TABLE, HILO_COLUMN, HILO_MAX_LO)),
ConventionBuilder.HasMany.Always(x => x.Cascade.AllDeleteOrphan()),
Table.Is(o => Inflector.Pluralize(o.EntityType.Name)),
PrimaryKey.Name.Is(o => "Id"),
ForeignKey.EndsWith("Id"),
DefaultLazy.Never(),
DefaultCascade.All()
);
// ...
我改變了Where子句來尋找特定類型的,而不是命名空間,但也沒有工作。映射對象仍然是空的。
此外,EntityBase類是一個空的類,但對於所有實體繼承的一個屬性「Id」。
編輯:我將實體移到自己的程序集,仍然有問題,所以它沒有關係到web項目程序集的位置。這件事我還是很迷茫。 :(
你可以舉一個你的實體和你用來創建配置/會話工廠的代碼的例子嗎? – 2010-11-10 20:30:56
我添加了代碼示例 – Chris 2010-11-10 20:34:16
如果向所有屬性添加「虛擬」,會發生什麼情況? NHibernate要求所有屬性都是「虛擬」的。 – 2010-11-10 20:38:15