繁体   English   中英

如何在没有主键实体框架的情况下映射表

[英]How to map table without primary key Entity Framework

我正在使用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; }
}

观察:如果我将[Key]属性添加到诸如Age类的某些列中,它将起作用,但是返回错误的数据。

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

实体框架需要不同于SQL的主键。

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

实际上,如果没有主键,请记住一个SQL VIEW,您只能在其中读取数据

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

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

我解决了这个问题。 复合键为我工作:例如:在上下文中,我定义了一些键 ,不仅是一个,而且是三个键:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM