對不起,英文不好,我對它的理解不好。插入記錄的問題。 Nhibernate
我有幾個實體:目錄和域。 關鍵字段(Id)中的引用不得打敗自動生成的,也就是說,我應該自己寫它們。
下面是代碼實體。
/// <summary>
/// Вредитель. [KEN]
/// </summary>
public class Pest
{
public virtual long Id {get; set;}
public virtaul string Value {get; set;}
public virtual string Remark {get; set;}
}
public class Damage
{
public virtual long Id {get; set;}
public virtual DamageType DamageType { get; set; }
public virtual Int16 DamageYear { get; set; }
public virtual Pest FirstPest { get; set; }
public virtual byte FisrtDamageExtent { get; set; }
}
我用automapping fluentNHibernate。
重疊用於手冊。
public class PestMap : IAutoMappingOverride<Pest>
{
#region IAutoMappingOverride<Pest> Members
public void Override(AutoMapping<Pest> autoMapping)
{
autoMapping.Id(x => x.Id, "Id").GeneratedBy.Foreign();
}
#endregion
}
,同時保持在DB
session.Save(
new Pest(103)
{
Id = 103,
Value = "value3",
Remarks = "Remark3"
});
實體實例得到一個錯誤 - 無法解析屬性:ID。 請告訴我如何解決這個問題。
編輯
科爾W¯¯ 是一個代碼生成模式:
public class ModelGenerator
{
public AutoPersistenceModel Generate()
{
var automap = new AutoPersistenceModel();
const string mappingsHbmFolder = @"..\..\Mappings\hbm";
if (!Directory.Exists(mappingsHbmFolder))
{
Directory.CreateDirectory(mappingsHbmFolder);
}
automap.Conventions.AddFromAssemblyOf<ModelGenerator>();
automap.UseOverridesFromAssemblyOf<ModelGenerator>();
automap.AddEntityAssembly(Assembly.GetAssembly(typeof(Activity)))
.Where(x => x.Namespace.Contains("Entities"))
.IgnoreBase(typeof(HandbookEntity<>))
.IgnoreBase(typeof(HandbookEntity))
.IgnoreBase(typeof(Entity<>))
.IgnoreBase(typeof(Entity))
.IgnoreBase(typeof(EntityWithCoppice))
.IgnoreBase(typeof(EntityWithNumber))
.WriteMappingsTo(mappingsHbmFolder);
return automap;
}
}
運行PROGRAMM
private static Configuration CreateSessionFactory()
{
var modelGenerator = new ModelGenerator();
return Fluently.Configure()
.Database(
MsSqlConfiguration
.MsSql2008
.ConnectionString(x => x
.Server(@"crookpc\sqlexpress")
.Database("b1")
.TrustedConnection())
.UseReflectionOptimizer())
.Mappings(m => m.AutoMappings.Add(modelGenerator.Generate()))
.ExposeConfiguration(BuildSchema)
.BuildConfiguration();
}
private static void BuildSchema(Configuration config)
{
new SchemaExport(config)
.SetOutputFile(@"db.sql")
.Create(false, true);
}
private static void Main(string[] args)
{
var sessionFactory = CreateSessionFactory().BuildSessionFactory();
using (var tx = session.BeginTransaction())
{
session.Save(
new Pest(103)
{
Id = 103,
Value = "value3",
Remarks = "Remark3"
});
tx.Commit();
}
Console.WriteLine("Press any key...");
Console.ReadKey();
}
}
你心目中的?
你的意思是我的代碼生成模型,配置和創建會話? – Ilya 2011-04-16 14:49:46
請看我的編輯進一步的細節。 – 2011-04-16 15:04:40
請看編輯帖子。 – Ilya 2011-04-16 17:14:26