Как отобразить таблицу без первичного ключа Entity Framework
Я использую Entity Framework для сопоставления некоторых таблиц, но я не смогу сделать это, пока не объявлю некоторый столбец в качестве первичного ключа.
Проблема в том, что моя таблица в моей базе данных не имеет первичного ключа и содержит миллионы строк. У меня нет разрешения на создание нового Id
колонка.
[Table("MYTABLE")]
public class myTable
{
[Column("NUMX")]
public virtual string NumX { get; set; }
[Column("NAME")]
public virtual string Name { get; set; }
[Column("AGE")]
public virtual int AGE { get; set; }
}
Obs: если я добавлю [Key]
приписать некоторый столбец, как Age
работает, но возвращает неверные данные.
Есть ли способ опустить первичный ключ?
2 ответа
Я разобрался с проблемой.Составные ключи работают для меня: например: в моем контексте я определил некоторые ключи, не только один, но три ключа:
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
**//Here is the secret**
modelBuilder.Entity<MyModel>().HasKey(x => new { x.NumX, x.Name,x.Age});
}
}
Entity Framework требует первичного ключа в отличие от SQL.
EF использует первичный ключ для уникальной идентификации строк (например, когда вы используете .Find()
или для выполнения операций обновления).
Фактически, не имея первичного ключа, помните SQL VIEW, где вы можете только читать данные.
Если какой-либо из столбцов однозначно идентифицирует определенную строку, установите ее в качестве первичного ключа (он не может быть NULL), также если в Sql это не ключ. В противном случае, если комбинация столбцов уникальна, создайте составной ключ с этими столбцами.
Помните, что у вас должен быть первичный ключ в 99% случаев, когда у вас нет первичного ключа, вам следует остановиться и подумать, имеет ли он смысл.