1

最初にエンティティ フレームワークとコードで自動移行を使用しようとしています。クラスに新しいプロパティを追加しました(チームもカスタムクラスです):

public virtual Team SecondTeam { get; set; }

データベースの更新に問題があります。コマンドを記述した後、コンソールに次のように表示されます。

列の直接的な名前変更は、SQL Server Compact ではサポートされていません。SQL Server Compact で列の名前を変更するには、再作成する必要があります。

通常、更新は機能しています(単純な int prop を追加しようとしたところ、更新されるだけです)が、それが仮想の場合は問題があります。誰でもこれで私を助けることができますか?ありがとうございました

編集:後のすべての行Update-Database -Verbose

Using NuGet project 'Project'.  
Using StartUp project 'Project'.  
Target database is: '|DataDirectory|database.sdf' (DataSource: |DataDirectory|database.sdf, Provider: System.Data.SqlServerCe.4.0, Origin: Configuration). 
No pending explicit migrations. 
Applying automatic migration: 201206130828142_AutomaticMigration. 
Direct column renaming is not supported by SQL Server Compact. To rename a column in SQL Server Compact, you will need to recreate it.

Edit2: データベースを変更したい Player クラス:

public class Player
    {
        [Key]
        public int PlayerID { get; set; }

        [Required]
        public string Name { get; set; }
        [Required]
        public string Surname { get; set; }
        public string Nickname { get; set; }
        public DateTime Birth { get; set; }

        public string PhotoUrl { get; set; }
        public string Post { get; set; }

        public int TeamID { get; set; }
        public virtual Team Team { get; set; }

        public int SecondTeamID { get; set; }
        public virtual Team SecondTeam { get; set; }

        public int UserId { get; set; }
        public virtual User User { get; set; }
    }

チームクラス:

public class Team
    {
        [Key]
        public int TeamID { get; set; }
        public string Name { get; set; }

        public string League { get; set; }
        public string Trainings { get; set; }

        public string PhotoUrl { get; set; }

        public int CoachID { get; set; }
        public int AassistantID { get; set; }
        public int ManagerID { get; set; }

        public virtual ICollection<Player> Players { get; set; }

        public bool showPosts { get; set; }
    }

そして、これは EF によって生成された SQL です。

CREATE TABLE "Players" (
    "PlayerID" int not null identity,
    "Name" nvarchar(4000) not null,
    "Surname" nvarchar(4000) not null,
    "Nickname" nvarchar(4000) null,
    "Birth" datetime not null,
    "PhotoUrl" nvarchar(4000) null,
    "Post" nvarchar(4000) null,
    "TeamID" int not null,
    "SecondTeamID" int not null,
    "UserId" int not null,
    "Team_TeamID" int null,
    "Team_TeamID1" int null,
    "SecondTeam_TeamID" int null,
    PRIMARY KEY ("PlayerID")
);

ALTER TABLE "Players" ADD CONSTRAINT "Team_Players" FOREIGN KEY ("Team_TeamID") REFERENCES "Teams"("TeamID");
ALTER TABLE "Players" ADD CONSTRAINT "Player_Team" FOREIGN KEY ("Team_TeamID1") REFERENCES "Teams"("TeamID");
ALTER TABLE "Players" ADD CONSTRAINT "Player_SecondTeam" FOREIGN KEY ("SecondTeam_TeamID") REFERENCES "Teams"("TeamID");
ALTER TABLE "Players" ADD CONSTRAINT "Player_User" FOREIGN KEY ("UserId") REFERENCES "Users"("UserID") ON DELETE CASCADE;
4

2 に答える 2

0

このサンプルSteven Sanderson - MvcScaffolding: One-to-Many Relationshipsに従い、開発時にこの機能を使用して、Scott Guthrie - Code-First Development with Entity Framework 4ブログに従って、起動時にデータベースを再作成すると思います。Taking advantage of SQL CE 4(段落を検索してThe RecreateDatabaseIfModelChanges Feature)

于 2012-06-22T07:09:39.887 に答える