2

一連のエンティティ セットアップを正しく機能させるのに問題があります。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 関連フィールドが含まれるようになりましたが、元のエラー メッセージが引き続き表示されます。

ティア、

4

1 に答える 1

1

No mapping エラーは、Country エンティティを DbContext に追加していないことが原因である可能性があります。

AccountModels.cs ファイルには、DbContext から派生した UsersContext があり、そこにDbSet<Country>.

ただし、ここには別の問題があります。たとえば、キーを使用して Country テーブルを作成すると、EF はデフォルトで Country テーブルに自動生成された ID 列を提供します。つまり、ID の値を挿入することはできず、自動生成されます。

国はおそらく、国の値を入力するルックアップテーブルです。したがって、おそらく CountryId を希望する国の値に設定するだけです

于 2012-10-12T05:36:32.970 に答える