2

올바르게 작동하도록 엔티티 집합을 가져 오는 데 문제가 있습니다. SQL Server 2008 R2 Express에 대해 VS2012에서 EF v5를 사용하고 있습니다.엔티티 프레임 워크 삽입시 일대일 관계 오류가 발생했습니다.

모든 것이 생성 된 데이터베이스에서 올바르게 보이지만 일부 테이블에 쓰는 데 아무런 문제가 없습니다. 같은 나는 또한 Country 엔티티가 정의되어

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    public long UserId { get; set; } 

    [StringLength(56)] 
    public string UserName { get; set; } 

    public Country Country { get; set; } 
    ... 
} 

:

나는 같은 UserProfile 객체가 정의되어 생성 된 열은 데이터베이스에 올바른 볼

[Table("Country")] 
public class Country 
{ 
    [Key] 
    public int Id { get; set; } 

    [StringLength(2)] 
    public string CountryCode { get; set; } 

    [StringLength(100)] 
    public string CountryName { get; set; } 

    public ICollection<UserProfile> UserProfiles { get; set; } 
    ... 
} 

, 만약 내가 스크립트를 잡아 좋아 보인다 :

ALTER TABLE [dbo].[UserProfile] WITH CHECK ADD CONSTRAINT [UserProfile_Country] FOREIGN KEY([Country_Id]) 
REFERENCES [dbo].[Country] ([Id]) 
GO 

을 그냥 테스트 목적으로 내가 구성 파일을 설정하는 시도

No mapping exists from object type MyApi.Data.Entities.Country to a known managed provider native type.

뿐만 아니라 코드의 관계를 지정하려면이 WebSecurity 방법은 내가 다음과 같은 오류가 실행

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new 
{ 
    Country = new Country { Id = 223, CountryCode = "UK", CountryName = "UK" }, 
    ... 
}); 

: 컨트롤러 액션에서 나는 다음이 데이터베이스로하지만 여전히 친숙하지 않습니다. 그것은 내가이 완전히 잘못된 기초의 일부를 얻고 국가 오브젝트에 프로파일의 목록을 가지고 정말 이상한 느낌

public class CountryEntityConfig : EntityTypeConfiguration<Country> 
{ 
    public CountryEntityConfig() 
    { 
     this.HasMany(x => x.UserProfiles) 
      .WithRequired() 
      .HasForeignKey(FKey => FKey.Country);    
    } 
} 

: 같은

는 config 보인다? 모든 의견을 감사드립니다.

편집 : 사용자 프로필에 내가 지금 가지고있는 몇 가지 변화를 몇 가지 클래스를 revisted 및했습니다

:

public int CountryId { get; set; } 

    public virtual Country Country { get; set; } 

Country.cs

public class Country 
{ 
    public int CountryId { get; set; } 

    [StringLength(2)] 
    public string CountryCode { get; set; } 

    [StringLength(100)] 
    public string CountryName { get; set; } 

    public virtual ICollection<UserProfile> UserProfiles { get; set; } 
} 

그리고 데이터베이스는 이제 Country 테이블과의 관계를 가진 UserProfile 테이블에 두 개의 CountryId 관련 필드를 포함하고 있으며 여전히 원래의 오류 m을 얻습니다. 에세지. 당신이 DbContext에 국가 엔티티를 추가하지 않았기 때문에

TIA,

답변

1

는에 매핑 오류가 아마 없다.

AccountModels.cs 파일에는 DbContext에서 파생 된 UsersContext가 있으며 여기에는 DbSet<Country>을 추가해야합니다.

그러나 여기에는 다른 문제가 있습니다. 예를 들어, Key를 사용하여 Country 테이블을 만들고 EF는 기본적으로 Country 테이블에 자동 생성 된 ID 열을 제공합니다. 즉, ID에 값을 삽입 할 수 없으면 자동으로 생성됩니다.

국가는 아마도 국가 값으로 채워지는 검색 표입니다.따라서 CountryId를 원하는 국가의 값으로 설정하십시오.

+1

국가 엔티티는 이미 DbContext에 있습니다. 이 예제에서는 항상 Id 속성이 아닌 클래스의 인스턴스를 사용합니다. UserProfile 클래스에 'int CountryId' 속성을 포함시켜 EF가 처리하도록해야한다는 뜻입니까? – Jammer

+0

@ Jammer - 새 국가 개체를 만들기 때문에 새 국가를 삽입 할 것이라고 EF에 말하고있는 것입니다. 그렇게 할 수는 있지만, 원하는 것은 아닐 것입니다. ID가 자동 생성되므로 ID를 제공 할 수 없습니다. 사용자를 만들고 ID를 할당하려는 경우 사용자의 CountryID 속성을 통해 할당해야합니다. –

+0

@ Jammer - 설명에서 DbContext에 Country 테이블을 추가 했음이 분명했습니다. –

관련 문제