Pergunta

Nós temos uma tabela que parece mais ou menos assim:

CREATE TABLE Lockers 
{
  UserID int NOT NULL PRIMARY KEY (foreign key),
  LockerStyleID int (foreign key),
  NameplateID int (foreign key)
}

Todas as teclas se relacionam com outras mesas, mas por causa da forma como o aplicativo é distribuído, é mais fácil para nós para passar ao longo IDs como parâmetros. Então, nós gostaríamos de fazer isso:

Locker l = new Locker { 
  UserID = userID, 
  LockerStyleID = lockerStyleID, 
  NameplateID = nameplateID 
};
entities.AddLocker(l);

Nós poderíamos fazê-lo em LINQ to SQL, mas não EF?

Foi útil?

Solução

Esta característica ausente parece incomodar muita gente.

  • Boas notícias:. MS vai abordar a questão com .NET 4.0
  • Más notícias:., Por agora, ou se você está preso em 3,5 você tem que fazer um pouco de trabalho, mas é possível

Você tem que fazê-lo como este:

Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();

Outras dicas

O que eu tenho feito para facilitar as coisas é adicionar a propriedade de chave estrangeira-me na classe parcial:

public int UserID
{
   get
   {
      if (this.User != null)
         return this.User.UserID;
   }
   set 
   {
      this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
   }
}

Você poderia fazer um método de extensão que constrói a entidade com base nestes ID do.

Usando um EntityKey resolve o seu problema;)

alk.

outro método, se você não se importa 'poluindo' você db esquema é adicionar uma coluna calculada, por exemplo, se você tivesse um campo de chave estrangeira FK_Customer você poderia definir uma nova coluna computada FK_Customer_Computed que tem a expressão FK_Customer. Quando você gera \ atualizar seu modelo edmx campo aparecerá como um campo regular que você pode, então, referência de você objeto de entidade.

ou esperar por EF4:)

Na sequência da resposta de Dylan, Alex James escreveu um blog sobre precisamente este, explicando o problema na sua totalidade e como ir sobre a solução parcial classe + propriedade.

fingindo Foreign Keys - EF3.5

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top