簡體   English   中英

數據庫優先方法缺少實體框架導航屬性

[英]Entity Framework navigation properties missing in DataBase first approach

我從客戶那里收到了無法更改的數據庫腳本。 當我嘗試使用EntityFramework Database First方法從這些腳本創建實體時,類中缺少引用關系:

CREATE TABLE agency(
    tenant_sktmp            INT             identity(1,1) not null,
    rec_create_tmstptmp     DATETIME        NOT NULL,
    rec_update_tmstptmp     DATETIME        NOT NULL,
    rec_created_bytmp       VARCHAR(50),
    rec_updated_bytmp       VARCHAR(50),
    env_nametmp             VARCHAR(100)    NOT NULL,
    product_app_nametmp     VARCHAR(100)    NOT NULL,
    tenant_idtmp            VARCHAR(50)     NOT NULL,
    tenant_nametmp          VARCHAR(100)    NOT NULL
    PRIMARY KEY (tenant_sktmp)
)


CREATE TABLE usertmp(
    user_sktmp             INT             identity(1,1) not null,
    rec_create_tmstptmp    DATETIME        NOT NULL,
    rec_update_tmstptmp    DATETIME        NOT NULL,
    rec_created_bytmp      VARCHAR(50),
    rec_updated_bytmp      VARCHAR(50),
    user_nametmp           VARCHAR(100)    NOT NULL,
    tenant_idtmp           VARCHAR(50)     NOT NULL,
    env_nametmp            VARCHAR(100)    NOT NULL,
    user_pwd_hashtmp       VARCHAR(255)    NOT NULL,
    user_first_nametmp     VARCHAR(200)    NOT NULL,
    user_last_nametmp      VARCHAR(200)    NOT NULL,
    user_hire_datetmp      DATETIME,
    user_birth_datetmp     DATETIME,
    user_staff_idtmp       VARCHAR(50),
    user_santrax_idtmp     VARCHAR(50),
    user_guidtmp           VARCHAR(128),
    PRIMARY KEY (user_sktmp)
)

CREATE UNIQUE INDEX tmp12 ON agency(tenant_idtmp, env_nametmp)
CREATE INDEX ref64tmp ON agency(env_nametmp)


CREATE UNIQUE INDEX user_key1qqq ON usertmp(user_nametmp, env_nametmp, tenant_idtmp)
CREATE INDEX ref56qq ON usertmp(tenant_idtmp, env_nametmp)
CREATE INDEX ref67qq ON usertmp(env_nametmp)

ALTER TABLE usertmp ADD CONSTRAINT Reftenant6tmp 
    FOREIGN KEY (tenant_idtmp, env_nametmp)
    REFERENCES agency(tenant_idtmp, env_nametmp)

從EF數據庫優先方法創建的類如下:

public partial class usertmp
    {
        public int user_sktmp { get; set; }
        public System.DateTime rec_create_tmstptmp { get; set; }
        public System.DateTime rec_update_tmstptmp { get; set; }
        public string rec_created_bytmp { get; set; }
        public string rec_updated_bytmp { get; set; }
        public string user_nametmp { get; set; }
        public string tenant_idtmp { get; set; }
        public string env_nametmp { get; set; }
        public string user_pwd_hashtmp { get; set; }
        public string user_first_nametmp { get; set; }
        public string user_last_nametmp { get; set; }
        public Nullable<System.DateTime> user_hire_datetmp { get; set; }
        public Nullable<System.DateTime> user_birth_datetmp { get; set; }
        public string user_staff_idtmp { get; set; }
        public string user_santrax_idtmp { get; set; }
        public string user_guidtmp { get; set; }
    }
public partial class agency
    {
        public int tenant_sktmp { get; set; }
        public System.DateTime rec_create_tmstptmp { get; set; }
        public System.DateTime rec_update_tmstptmp { get; set; }
        public string rec_created_bytmp { get; set; }
        public string rec_updated_bytmp { get; set; }
        public string env_nametmp { get; set; }
        public string product_app_nametmp { get; set; }
        public string tenant_idtmp { get; set; }
        public string tenant_nametmp { get; set; }
    }

我們可以看到這兩個類之間缺少關系。 我如何確定,關系引用仍然存在,因為我在引用代理表的usertmp表中具有外鍵。

Sql腳本無法更改。 任何幫助,將不勝感激。

如果您無法控制模式,並且使用非關鍵字段進行鏈接,則可以通過JOIN語句關聯表。 見下文。

另外,您可以使用批注將更友好的類屬性映射到可讀性較低的SQL列名稱(您需要在部分類中執行此操作,以便在重新生成時不會被擦除):

public partial class usertmp
    {
    ...
    [Column("user_first_nametmp")]
    public string FirstName { get; set; }
    [Column("user_last_nametmp")]
    public string LastName { get; set; }
    [Column("user_birth_datetmp")]
    public Nullable<System.DateTime> BirthDate { get; set; }
    ...
    }

所以現在您可以加入:

var query =
    from u in usertmp
    join a in agency on u.tenant_idtmp equals a.tenant_idtmp
    select new
    {
        FirstName = u.FirstName,
        LastName = u.LastName,
        BirthDate = u.BirthDate,
        AgencyName = a.env_nametmp // You could map this to a friendly name as well
    };

您可以將結果選擇到如上所述的ViewModel或匿名對象中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM