5

移行でエンティティフレームワーク5の列挙型を整数型の列にマップするのが少し難しいです。ここでは、コードは次のようになります。enumを保存するときに不正な値

[Table("UserProfile")] 
public class UserProfile 
{ 
    public enum StudentStatusType 
    { 
     Student = 1, 
     Graduate = 2 
    } 

    [Key] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string FullName { get; set; } 
    public StudentStatusType Status { get; set; } 
} 

移行は次のようになります。

public partial class EnumTest : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("UserProfile", "Status", c => c.Int(nullable: false, defaultValue:1)); 
    } 

    public override void Down() 
    { 
     DropColumn("UserProfile", "Status"); 
    } 
} 

しかし、私はそれがデータベースに反映されていない変更を保存するとき。

var user = new UserProfile(); 
user.Status = UserProfile.StudentStatusType.Graduate; 
user.FullName = "new"; 
user.UserName = "new"; 
users.UserProfiles.Add(user); 
users.SaveChanges(); 

データベース:

---------------------------------------------------- 
|UserId | UserName | FullName | Status | 
---------------------------------------------------- 
|1  | new  | new  | 1  | 
---------------------------------------------------- 
+0

.NET Framework 4をターゲットとしていますか? – Pawel

+0

私は.NET Framework 4.5をターゲットにしています。 –

答えて

4

この理由は、列挙型がクラス内にネストされていることです。 Entity Frameworkはネストされた型を検出しません。列挙型をクラスから移動し、それが機能するかどうかを確認してください。コードファーストアプローチを使用する場合

編集

EF6は今(列挙型を含む)のネストされたタイプをサポートしています。

+0

それでした。ありがとう、私はその制限について知らなかった。 –

関連する問題