如何映射没有主键实体框架的表

时间:2018-04-12 16:54:42

标签: asp.net-mvc entity-framework db-first

我使用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 个答案:

答案 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});
    }
}