Temos um aplicativo .NET Framework 4.8 que usa o Entity Framework 6.
Agora, estamos com um problema: precisamos adicionar algumas tabelas que não garantem nenhuma unicidade (nenhuma chave primária e as linhas podem ser duplicadas). Não há como alterar as tabelas, pois isso pode causar problemas (esta tabela é preenchida novamente às 4 da manhã todos os dias por um programa que não podemos controlar).
Basicamente o mesmo problema descrito nesta pergunta , mas a resposta simplesmente disse para não usar o Entity Framework 6. Outra alternativa que posso pensar é ter uma exibição ou outro programa que importe os dados desta tabela para uma nova tabela.
Não existe realmente uma solução alternativa para a API Fluent ou para a Anotação no Entity Framework? Preciso mesmo introduzir uma maneira totalmente nova de acessar nosso banco de dados ou uma nova visualização só porque no EF6 uma entidade precisa ter uma chave primária?
Exemplo da relação das tabelas (tabela real, mas removi a maioria das colunas não relacionadas):
class Customer
{
[Key]
public int CustomerID { get; set; }
public string FirstName { get; set; }
public virtual ICollection<CustomerOutboundEvent> CustomerOutboundEvents { get; set; }
}
// The new table
class CustomerOutboundEvent
{
// Adding key that doesn't actually exist will cause this error: Invalid column name 'CustomerOutboundEventID'.
//[Key]
//public int CustomerOutboundEventID { get; set; }
public int CustomerID { get; set; }
public Customer Customer { get; set; }
public string OutboundNumber { get; set; }
public string EventMessage { get; set; }
}
Você pode mentir sobre quais colunas são as colunas-chave na tabela se nunca usar o controle de alterações ao consultar a tabela.
Para desabilitar o rastreamento de alterações, consulte: https://learn.microsoft.com/en-us/ef/ef6/querying/no-tracking
Como você tem duplicatas, mesmo adicionar cada coluna como uma coluna-chave no EF não fará o controle de alterações funcionar, pois o EF se recusa a carregar duplicatas no rastreador de alterações.
EF Core tem tipos sem chave