0

는 다음과 같이 정의 된 데이터 모델과 간단한 마이크로 블로깅 플랫폼은 다음과 고려 :EF6 코드 우선에서 사용자 정의 참조 열 이름을 어떻게 설정합니까?

[Table("users")] 
public class User 
{ 
    [Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long Id { get; set; } 

    [Column("name"), MaxLength(45), Index(IsUnique = true)] 
    public string Name { get; set; } 

    [Column("password"), MaxLength(45)] 
    public string Password { get; set; } 

    public virtual ICollection<Message> Messages { get; set; } 
} 


[Table("messages")] 
public class Message 
{ 
    [Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long Id { get; set; } 

    [Column("text"), MaxLength(512)] 
    public string Text { get; set; } 

    [Column("author")] 
    public virtual User Author { get; set; } 
} 

나는 그것을 데이터베이스 (SQL DDL) 첫 번째 방법 설계했다, 나는 외부 키로 messages.author 참조 users.id 포함했다. 나는 그것을 이렇게 좋아한다 : 깔끔하고 설명 적이다.

그러나 코드 우선 방법을 시도해 보았을 때, 명시 적으로 [Column("author")] 특성을 지정 했음에도 불구하고 이 아닌 외래 키 열의 이름이 messages.User_Id 인 것으로 나타났습니다.

어떻게이 문제를 해결할 수 있습니까?

내가 .User_Id하지 확실히 참조가 더 필요한 경우 분명하지만, 할 (대신 내 원래 .author 아이디어) 단순히 .user 그것을 이름을 동의 할 것 -이, 명백한 중복 추한 _Id이 키에 추가됩니다 때 완전히 싫어 열.

SQLiteCodeFirst 라이브러리가있는 SQLite 데이터베이스를 사용하며이 라이브러리가 일반적인 Entity Framework 동작인지 아니면이 특정 라이브러리의 버그인지 확실하지 않습니다.

답변

1

그냥 앞에 서서, LocalDb를 사용하여 코드를 테스트했을 때 비슷한 동작을하지만 생성 된 키는 User_ID 대신 Author_ID입니다. 귀하의 설명을 변경하려고 시도하는 동안 코드 변경 사항을 반영하도록 업데이트되지 않았다고 가정합니다.

User에 대한 참조를 보유하기 위해 Message 클래스에 정의 된 속성이 없으므로 자체적으로 (Author_ID)를 생성합니다. 직접 추가하고 열 주석을 이동하면 데이터베이스는 예상 한 이름을 사용합니다.

그래서 Message 클래스는 지금 것 :

[Table("messages")] 
public class Message 
{ 
    [Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long Id { get; set; } 

    [Column("text"), MaxLength(512)] 
    public string Text { get; set; } 

    [Column("author")] 
    public long AuthorId { get; set; } 

    public virtual User Author { get; set; } 
}