Извините за плохой английский, я плохо его интерпретирую.
У меня есть несколько сущностей: каталоги и домены.
Ссылки в ключевых полях (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; }
}
Я использовал автоматическое преобразование 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
}
при сохранении экземпляра сущности в БД
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;
}
}
Запустить программу
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();
}
}
Вы имеете в виду?