Хорошо, я изменил код, чтобы отразить предложенные вами изменения, а также проделал еще несколько «копаний», чтобы попытаться решить эту проблему.Теперь у меня есть следующая структура базы данных:
ТАБЛИЦА Клиент
Идентификатор uniqueidentifier
Имя varchar (50)
День рождения datetime
TABLE Заказ
Id uniqueidentifier
CustomerId uniqueidentifier
Цена float
TABLEMockEntities
Id uniqueidentifier
EntityId uniqueidentifier
ReadableName nvarchar (MAX)
и, следовательно, следующие ClassMap.Из того, что мне удалось извлечь из других источников, я пытаюсь достичь чего-то вроде объединения.Что касается погодных условий, то это внешнее или внутреннее ... я не уверен.
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Table("Customer");
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Birthday);
Join("MockEntities", me =>
{
Id<Guid>("Id");
me.Map(xx => xx.ReadableName);
me.Map(xx => xx.Id, "EntityId");
});
HasMany(x => x.Orders).Cascade.All().Not.LazyLoad();
}
}
ClassMap for Order выглядит почти идентично, но для полноты картины я включу его в этот пост.
public class OrderMap : ClassMap<Order>
{
public OrderMap()
{
Table("Order");
Id(x => x.Id);
Map(x => x.Price);
Map(x => x.CustomerId, "CustomerId");
Join("MockEntities", me =>
{
Id<Guid>("Id");
me.Map(xx => xx.ReadableName);
me.Map(xx => xx.Id, "EntityId");
});
}
}
Однако теперь, когда я запускаю свои тесты, мне выдается следующая ошибка:
`System.Data.SqlServerCeException: имя столбца недопустимо.[Имя узла (если есть) =, имя столбца = идентификатор клиента]
На всякий случай, если это кому-нибудь пригодится, трассировка стека из графического интерфейса NUnit:
at System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
at NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session)
at NHibernate.Action.EntityInsertAction.Execute()
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
at NHibernate.Engine.ActionQueue.ExecuteActions()
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
at NHibernate.Impl.SessionImpl.Flush()
at NHibernate.Transaction.AdoTransaction.Commit()
at MySolution.DataAccess.ConnectionProviders.NHibernateConnection.Create[TEntity](TEntity objectToCreate) in MySolution.DataAccess\ConnectionProviders\NHibernateConnection.cs:line 154
at MySolution.Testing.DataAccess.Connection.Testing_Connections.Function_NHibernateCreateNestedEntity()
И, наконец,SQL, который использует NHibernate:
NHibernate: INSERT INTO Customer (Name, Birthday, Id) VALUES (@p0, @p1, @p2);@p0 = 'David', @p1 = 03/09/2010 07:28:22, @p2 = 68fb7dd7-5379-430f-aa59-9de6007b2d56
NHibernate: INSERT INTO MockEntities (ReadableName, EntityId, Customer_id) VALUES (@p0, @p1, @p2);@p0 = 'Function_NHibernateCreateNestedEntity1', @p1 = 00000000-0000-0000-0000-000000000000, @p2 = 68fb7dd7-5379-430f-aa59-9de6007b2d56
07:28:28,851 ERROR [TestRunnerThread] AbstractBatcher [(null)]- Could not execute command: INSERT INTO MockEntities (ReadableName, EntityId, Customer_id) VALUES (@p0, @p1, @p2)
The column name is not valid. [ Node name (if any) = ,Column name = Customer_id ]
Боюсь, я немного не в себе, когда речь заходит об этой проблеме.До того, как я пытался заставить это объединение в отображениях работать, система очень хорошо сохраняла объект Customer и содержащуюся в нем коллекцию Order.Однако теперь кажется, что он ожидает столбец, который я нигде не определил, а именно «Идентификатор клиента».
Любой вклад с благодарностью, спасибо.