Я создал модель, которая содержит этот объект:
Теперь, когда EF btw. CodeGenerator генерирует код для этого объекта, отсутствует аннотация для ПК:
public partial class tLieferscheinPos
{
public int kLieferscheinPos { get; set; }
public int kLieferschein { get; set; }
public Nullable<int> kBestellPos { get; set; }
public Nullable<decimal> fAnzahl { get; set; }
}
Когда я бегу теперь с созданием DbContext с connectionString (где eazybusinessEntitis
- DbContext
):
this.context = new eazybusinessEntities(connStr);
EF всегда будет обновлять мою базу данных или выбросить исключение (когда я OnModelCreating
throw new UnintentionalCodeFirstException();
в OnModelCreating
):
One or more validation errors were detected during model generation:
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'tLieferscheinPos' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'tLieferscheinPos' is based on type 'tLieferscheinPos' that has no keys defined.
Когда я добавляю [Key]
в свойство kLieferscheinPos
, он работает правильно. Но это изменение всегда будет перезаписано, когда я заново создаю код из модели.
Что я могу сделать, чтобы решить эту проблему правильно?
Вы можете объявить ключ в своем классе контекста...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<tablename>().HasKey(e => e.keycolumnname);
}
Если вы используете viewmodel, вы можете объявить [ключ] там...
public class products
{
[Key]
public int productid { get; set; }
...
}
kLieferscheinPos
не являетсяkLieferscheinPos
первичного ключа в вашей таблице? Так и должно быть ! (и тогда, я полагаю, EF распознает его как ключ и соответственно установит атрибут)