1

私はASP.NET MVC 5 チュートリアルに合格し、既存のアプリを mvc 5 に書き直したいと考えています。2 つのテーブルがUsersありCategories、それらが接続されているとしましょうUserID

mvc5 では、認証モデルをデータベースに接続できるので、サンプルUserモデルを次のように更新しました。

public ICollection<Category> Categories { get; set; }

Category追加したモデルにも

public int UserID { get; set; }
public User User { get; set; }

私は mvc3/ef4 で働いていました。しかし、移行を行うとエラーが発生します:

オブジェクト「PK_dbo.User」は列「Id」に依存しています。1 つ以上のオブジェクトがこの列にアクセスしているため、ALTER TABLE ALTER COLUMN Id は失敗しました。

ここに私のモデルがあります:

ユーザー (サンプル プロジェクトからの 1 対 1 + カテゴリへのリンク)

public class User : IUser
{
    public User()
        : this(String.Empty)
    {
    }

    public User(string userName)
    {
        UserName = userName;
        Id = Guid.NewGuid().ToString();
    }

    [Key]
    public string Id { get; set; }

    public string UserName { get; set; }

    public ICollection<Category> Categories { get; set; }
}

カテゴリーモデル

public class Category
{
    public int UserID { get; set; }
    public User User { get; set; }

    public int ID { get; set; }

    public int ParentID { get; set; }

    public string Name { get; set; }
    //....
}

環境

public class BackendDBContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<UserSecret> Secrets { get; set; }
    public DbSet<UserLogin> UserLogins { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<UserRole> UserRoles { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

    protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
    {
       //
    }
}
4

1 に答える 1

3

コメントからの詳細:

クラスUserにはstringキー プロパティがあります。カテゴリのUserIDプロパティは同じタイプである必要があります。IDそうではないので、EF が の型に一致するように列を変更しようとしていると推測していますがUserID、これは機能しないはずです。

ただし、追加の注意:

経由でユーザー ID を設定しています

Id = Guid.NewGuid().ToString();

しかし、それを格納するための自然な型はGuid( uniqueidentifierSQL Server では) です。ユーザーのIDプロパティとカテゴリのUserIDプロパティの両方をそれに変更できます。

于 2013-08-31T08:48:24.920 に答える