![](/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.