0

我正在使用实体框架来映射一些表,但除非我将某些列声明为主键,否则我不能这样做。

这里的问题是我的数据库中的表没有主键并且有数百万行。我无权创建新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,它可以工作,但返回错误的数据。

有什么方法可以省略主键吗?

4

2 回答 2

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});
    }
}
于 2018-04-14T16:28:53.860 回答
0

与 SQL 不同,实体框架需要主键。

EF 使用主键来唯一标识行(例如当您使用.Find()或执行更新操作时)。

事实上,没有主键记得 SQL VIEW,你只能读取数据

如果任何列唯一标识某一行,则将其设置为主键(不能为 NULL),如果在 Sql 中它不是键。否则,如果列的组合是唯一的,则使用这些列创建一个复合键。

请记住,在 99% 的情况下你应该有一个主键,当你没有主键时,你应该停下来想想它是否有意义。

于 2018-04-13T09:10:39.860 回答