我使用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
,它会起作用,但会返回错误的数据。
有没有办法省略主键?
答案 0 :(得分:0)
实体框架需要主键,而不像SQL。
EF使用主键来唯一标识行(例如,当您使用.Find()
或执行更新操作时)。
事实上没有主键记住SQL VIEW,你可以只读取数据。
如果任何列唯一标识某个行,则将其设置为主键(它不能为NULL ),如果在Sql中它不是键。 否则,如果列的组合是唯一的,则使用这些列创建复合键。
请记住,在99%的情况下你应该有一把主键,当你没有主键时,你应该停下来思考是否有意义。
答案 1 :(得分:0)
我想出了问题所在。 复合键适合我: 例如: 在我的上下文中,我定义了某些键,而不仅仅是一个键,而是三个键:
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});
}
}