簡體   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