2012-10-31 2 views
0

나는 분명히 뭔가를 놓치고 있지만 다음 코드가 올바르게 작동하지 않는 것 같습니다.EF5 코드 MySQL을 사용하는 첫 번째 GUID

이 GUID를 사용하여 내 POCO 클래스 중 하나입니다

public class PlayerConfiguration : EntityTypeConfiguration<Player> 
{ 
    public PlayerConfiguration() 
    { 
     ToTable("Players", "ACDB"); 

     Property(p => p.PlayerID) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     Property(p => p.UserName).HasMaxLength(25); 
    } 
} 

구성은 다음에 등록 :

public class Player 
{ 
    public virtual Guid PlayerID { get; set; } 
    public virtual int? GuildID { get; set; } 

    public virtual int AccountNumber { get; set; } 
    public virtual string UserName { get; set; } 

    public virtual Guild Guild { get; set; } 

    public virtual ICollection<Coordinate> Coordinates { get; set; } 
} 

그것은이 유창함 API를 사용하여 자신의 구성 클래스에 연결됩니다 DbContext.

나는 다음과 같다지고있어 오류 : 내가 잘못거야 위치에 'PlayerID'

모든 아이디어를 열 잘못된 열 지정자?

답변

1

여기서 생각한 것은 Entity Framework가 PlayerID 열을 GUID (MyUID의 UUID)로 만든 다음 AUTO_INCREMENT 특성을 적용한 것입니다.

http://docs.oracle.com/cd/E17952_01/refman-5.5-en/numeric-type-attributes.htmlAUTO_INCREMENT은 정수 열에 대해서만 유효하며이 오류가 발생한 것일 수 있습니다.

여기에 시도 할 것은 PlayerID을 GUID에서 int로 변경하는 것입니다. 이는 최소한 오류의 원인을 좁혀 야합니다.

편집 한 Convert and modify a model field as an DataColumn object에서

Disabling identity (auto-incrementing) on integer primary key using code first 당신과 함께 증가 자동을 해제 할 수 있어야한다 : 사용, 적어도 SQL 서버에

HasKey(p => p.PlayerID) 
Property(p => p.PlayerID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None) 

편집 2

Property(p => p.PlayerID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None) 새 행을 만들 때 빈 Guid가 삽입됩니다 (비록 합리적인 것처럼 보이지만 다른 곳에서는 이런 식으로 행동 할 것입니다). 내가 볼 수있는 유일한 합리적인 해결 방법은 Player 생성자에서 PlayerID을 채울 수 있습니다 :

public Player() 
{ 
    this.PlayerID = Guid.NewGuid(); 
} 
+0

그것은 int로 작업을 수행, 나는 그것을 테스트했습니다. 그러나 나는 GUID/UUID를 선호한다. AUTO INCREMENT 스위치가 켜지지 않도록하는 방법이 있습니까? 아니면 int 값에 최대 길이를 설정할 수있는 것과 같이 Code First에서 아직 누락 된 것 중 하나입니까? 어쨌든 Julia Lerman의 Programming Entity Framework : Code First에 따르면이 방법은 로컬 SQL Express 서버 및 SQL Server CE에서 작동합니다. 아마도 MySQL의 .Net 공급자의 잘못 일 수 있습니까? – Arcadian

+0

@Arcadian 최근 편집 내역보기 –

+0

하지만 그렇게하면 데이터베이스가 GUID를 생성해야한다는 것을 알지 못합니다. 적어도 내가 이해하는 방법은 GUID입니다. 그냥 0 값 GUID를 삽입합니다. – Arcadian