У меня есть две таблицы: Quote и Agent. Цитата имеет столбец с именем AgentID, который является внешним ключом в Agent.
При добавлении таблиц в мою модель в VS класс Quote имеет ссылку на Agent.
При попытке добавить новую цитату я создаю новый объект цитаты и устанавливаю агент следующим образом:
entity.Agent = (from x in entities.AgentEntities
where x.AgentID == quote.AgentID select x).FirstOrDefault();
Прямо перед вызовом SaveChanges я исследую объект и вижу, что все значения установлены. Объект Agent имеет все установленные значения. Я даже проверил свойство EntityKey и установил его.
Несмотря на наличие значений, я получаю эту ошибку:
Cannot insert the value NULL into column 'AgentID', table 'Database.dbo.Quote';
column does not allow nulls. INSERT fails.
Я не уверен, что еще проверить, возможно, есть способ просмотра SQL?
EDIT: Я использую шаблон репозитория в своем приложении. Я использую PONO в своем приложении, а затем создаю новые объекты сущностей. Когда я сохраняю новую цитату, я вызываю этот метод:
public override void CreateQuote(Quote quoteToCreate)
{
var entity = ConvertQuoteToQuoteEntity(quoteToCreate);
entities.AddToQuoteEntities(entity);
entities.SaveChanges(); //Error is thrown here
}
private QuoteEntity ConvertQuoteToQuoteEntity(Quote quote)
{
var entity = new QuoteEntity();
if (quote != null)
{
entity.QuoteID = quote.QuoteID;
entity.DiscoveryMethod = quote.DiscoveryMethod;
entity.CompletedDateTimeStamp = quote.CompletedDateTimeStamp;
entity.CommisionAmount = quote.CommisionAmount;
entity.QuoteKey = quote.QuoteKey;
entity.SelectedOption = quote.SelectedOption;
entity.SentDateTimeStamp = quote.SentDateTimeStamp;
entity.CustomerName = quote.CustomerName;
entity.CustomerEmail = quote.CustomerEmail;
entity.CustomerPrimaryPhone = quote.CustomerPrimaryPhone;
entity.CustomerAlternatePhone = quote.CustomerAlternatePhone;
entity.Agent = (from x in entities.AgentEntities where x.AgentID == quote.AgentID select x).First<AgentEntity>();
}
return entity; //Everything looks good here (Agent is fully populated)
}
Вот что-то странное. Мне удалось увидеть SQL-код, и мне это выглядит странно:
insert [dbo]. [Quote] ([QuoteKey], [CommisionAmount], [QuoteRequestID], [DiscoveryMethod], [SelectedOption], [CreatedDateTimeStamp], [SentDateTimeStamp], [CompletedDateTimeStamp], [CustomerName], [CustomerEmail ], [CustomerPrimaryPhone], [CustomerAlternatePhone]) значения (@0, null, null, @1, null, @2, null, null, @3, @4, @5, @6) выберите [QuoteID], [AgentID] от [dbo]. [Цитата] где @@ROWCOUNT > 0 и [QuoteID] = scope_identity()