2014-09-20 88 views
1

我创建了被包含该实体的模型:实体框架不添加[关键]

enter image description here

现在,当EF BTW。该CodeGenerator正在生成的代码为这个实体,对于PK缺少注释:

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; } 
} 

当我用的connectionString(其中eazybusinessEntitisDbContext)创建的DbContext现在运行:

this.context = new eazybusinessEntities(connStr);    

EF会随时更新我的​​数据库 - 或者抛出异常(当我在OnModelCreating删除throw new UnintentionalCodeFirstException();):

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时,它工作正常。但是,当我从模型中重新创建代码时,总是会覆盖此更改。

如何正确解决此问题?

+0

好吧,是不是'kLieferscheinPos'表中的**主键**列?它应该是**! (然后,我认为EF会将其识别为关键字并据此设置属性) – 2014-09-20 10:38:47

+0

您是否在EF中使用模型第一种方法? – 2014-09-20 10:41:42

+0

如果你命名密钥列kLieferscheinPosID它会生成密钥属性呢? – pln 2014-09-20 10:51:19

回答

0

你可以声明你的上下文类中的关键...

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<tablename>().HasKey(e => e.keycolumnname); 
} 

如果您使用的是视图模型,你可以声明[关键]那里...

public class products 
{ 
    [Key] 
    public int productid { get; set; } 
    ... 
}