2017-01-18 1 views
0

변경할 수없는 고객으로부터 데이터베이스 스크립트를 받았습니다. 내가 EntityFramework 데이터베이스 첫 번째 방법을 사용하는 스크립트에서 개체를 생성하려고 할 때 , 참조 관계가 클래스에서 누락 : EF 데이터베이스 첫 번째 방법에서 생성DataBase의 첫 번째 접근 방식에서 Entity Framework 탐색 속성이 누락되었습니다.

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) 

클래스입니다 다음과

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 스크립트는 변경할 수 없습니다. 도움이 될 것입니다.

+0

Entity Framework는 키 필드를 통한 관계 만 지원합니다. tenant_idtmp가 INT FK로 보이지 않습니다. –

+0

정수 인 경우에도 동일한 문제가 발생합니다. –

+0

tenant_idtmp가 연결되는 필드라고 가정합니다. 그것들이 문자열이라는 점에서 차이가 없다. 문제는 그것이 대행자 클래스 (tenant_sktmp)의 기본 키가 아니기 때문에 [EF는 관계를 설정할 수 없다.] (http://stackoverflow.com/questions/13498795/entity -framework-code-first-mapping-foreign-key-without-foreign-key)를 사용합니다. 그러나 조인을 할 수 있습니다. –

답변

0

스키마를 제어 할 권한이없고 링크 용 키가 아닌 필드를 사용하는 경우 JOIN Statements을 통해 테이블을 연결할 수 있습니다. 아래를 참조하십시오.

또한, 당신은 (당신이 다시 생성 할 때이 멸종되지 않도록 당신이 부분 클래스에서이 작업을 수행 할 필요가) 덜 읽을 수있는 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 
    }; 

당신은 뷰 모델 또는 위의 익명 객체로 결과를 선택할 수 있습니다 : 그래서 지금 당신과 함께 가입 할 수있다.

관련 문제