2

두 개의 엔터티 모델, 계정 및 사용자가 있는데 종속 모델 (User)에서 외래 키를 구현하는 데 어려움이 있습니다. Azure 모바일 서비스 앱을 개발할 때 기본적으로 'Id'키 필드를 제공하는 엔티티 데이터 인터페이스를 사용해야합니다. 내가 '통해 AccountId'엔티티 프레임 워크는 '계정'테이블, '아이디'열로 해석 찾으려 지정할 때외래 키 관계 Entity Framework 코드 우선 (EntityData 문제)

public class Account : EntityData 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int AccountId { get; set; } 
    [Required] 
    public string Username { get; set; } 
    [Required] 
    public string EmailAddress { get; set; } 
    [Required] 
    public string Password { get; set; } 
    [Required] 
    public string SecurityQuestion { get; set; } 
    [Required] 
    public string SecurityAnswer { get; set; } 
    [Required] 
    public bool IsBusiness { get; set; } 

    public virtual User User { get; set; } 
    public virtual Business Business { get; set; } 
} 

public class User : EntityData 
{ 
    [Key, Column(Order=1)] 
    public virtual string Id { get; set; } 
    [Key, Column(Order=2), ForeignKey("Account")] 
    public int AccountId { get; set; } 
    public int UserId { get; set; } 
    [Required] 
    public string Forename { get; set; } 
    [Required] 
    public string Surname { get; set; } 

    public virtual Account Account { get; set; } 
} 

내 문제가 발생합니다. 코드 마이그레이션에서

출력 : -

User_Account_Source : 다중성은 관계 'USER_ACCOUNT'의 역할 'User_Account_Source'에서는 유효하지 않습니다. 종속 역할 속성은 주요 속성이 아니기 때문에 종속 역할의 다중성 인 상한값은 '*'여야합니다. User_Account_Target_User_Account_Source :: 참조 제한의 종속 역할에있는 모든 속성 유형 은 주 속성의 해당 속성 유형과 동일해야합니다. 엔티티 '사용자'의 속성 'AccountId'의 유형이 참조 제약 'User_Account'의 엔티티 'Account'에있는 속성 'Id'의 유형과 일치하지 않습니다.

모든 의견을 높이 평가하겠습니다!

+0

왜'User'는 복합 기본 키가 있습니까? Id가 충분하지 않아야합니까? –

+0

내 자신의 (UserId 및 AccountId) 대신 EntityData에 의해 생성 된 GUID Id 필드를 사용하고 싶지 않습니다. 기본 키를 만들려고하지만 EntityData ID 키로 인해 주문해야합니다. – davidcrossey

답변

1

EF 그것을 이해하는 이유는 일대 다 관계 대신 일대일 당신이 Id 재산으로 PK와를 작성할 때문입니다 느릅 나무가 FK.In 가 없습니다 일대일 관계 한쪽 끝은 이고 나머지는이어야하고 두 번째 끝은 종속이어야합니다. 주 끝은 먼저 삽입되고 종속 된 것이 없어도 존재할 수 있습니다. 종속 끝은 주체에 외래 키가 있으므로 주체 뒤에 삽입해야하는 것입니다. 일대일 관계를 구성 할 때 Entity Framework에서는 종속 키의 기본 키도 외래 키일 것을 요구합니다. 그렇지 않으면 EF는이를 일대일 관계로 보지 않습니다.

public class Account 
{ 
    [Key] 
    public int Id { get; set; } 

    public virtual User User{ get; set; } 
} 

public class User 
{ 
    [Key, ForeignKey("Account")] 
    public int AccountId { get; set; } 

    public virtual Account Account{ get; set; } 
} 

당신이 그것에 대해 생각한다면, 그것은 의미, 그렇지 않으면, 아래의 기록이 일어날 수 있습니다 :

Accounts 
Id 
11111111 
22222222 

Users 
Id  AccountId 
12rr  11111111 
22tt  11111111 
+0

'Id'를 사용할 수 없습니다.이 속성은 기본 클래스 인 'EntityData'에 이미 정의되어 있으므로 사용할 수 없습니다 - 컨트롤러에서 상속해야합니다. Web Apis – davidcrossey

+0

보기 http://azure.microsoft.com/en-us/documentation/articles/mobile-services-dotnet-backend-use-existing-sql-database/ – saramgsilva

관련 문제