一連のエンティティ セットアップを正しく機能させるのに問題があります。SQL Server 2008 R2 Express に対して VS2012 で EF v5 を使用しています。
生成されたデータベースではすべてが正しいように見えますが、一部のテーブルへの書き込みに成功していません。
UserProfile
次のように定義されたオブジェクトがあります。
[Table("UserProfile")]
public class UserProfile
{
[Key]
public long UserId { get; set; }
[StringLength(56)]
public string UserName { get; set; }
public Country Country { get; set; }
...
}
Country
次のように定義されたエンティティもあります。
[Table("Country")]
public class Country
{
[Key]
public int Id { get; set; }
[StringLength(2)]
public string CountryCode { get; set; }
[StringLength(100)]
public string CountryName { get; set; }
public ICollection<UserProfile> UserProfiles { get; set; }
...
}
生成された列はデータベースで正しく見えます。スクリプトを作成すると、見栄えがよくなります。
ALTER TABLE [dbo].[UserProfile] WITH CHECK ADD CONSTRAINT [UserProfile_Country] FOREIGN KEY([Country_Id])
REFERENCES [dbo].[Country] ([Id])
GO
コントローラーアクションでのテスト目的で、次のものがあります。
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new
{
Country = new Country { Id = 223, CountryCode = "UK", CountryName = "UK" },
...
});
このWebSecurity
メソッドを実行すると、次のエラーが発生します。
オブジェクト型 MyApi.Data.Entities.Country から既知のマネージド プロバイダーのネイティブ型へのマッピングは存在しません。
コードとデータベースで関係を指定する構成ファイルをセットアップしようとしましたが、それでもうまくいきません。
構成は次のようになります。
public class CountryEntityConfig : EntityTypeConfiguration<Country>
{
public CountryEntityConfig()
{
this.HasMany(x => x.UserProfiles)
.WithRequired()
.HasForeignKey(FKey => FKey.Country);
}
}
国オブジェクトにプロファイルのリストがあるのは本当に奇妙に感じますが、これでいくつかの基本が完全に間違っているのでしょうか? 任意の入力をいただければ幸いです。
編集:
いくつかのクラスを修正し、いくつかの変更を加えました。現在のユーザー プロファイルは次のとおりです。
public int CountryId { get; set; }
public virtual Country Country { get; set; }
国.cs
public class Country
{
public int CountryId { get; set; }
[StringLength(2)]
public string CountryCode { get; set; }
[StringLength(100)]
public string CountryName { get; set; }
public virtual ICollection<UserProfile> UserProfiles { get; set; }
}
また、データベースには、Country テーブルとの関係を持つ UserProfile テーブルに 2 つの CountryId 関連フィールドが含まれるようになりましたが、元のエラー メッセージが引き続き表示されます。
ティア、