![](/img/trans.png)
[英]Working with a Read Only table without a primary key in Entity Framework
[英]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.