0

次のエラーが表示されます: タイプ 'EfTest.Person' がマップされませんでした。Ignore メソッドまたは NotMappedAttribute データ注釈を使用して、型が明示的に除外されていないことを確認してください。型がクラスとして定義されていること、プリミティブ、ネスト、またはジェネリックではないこと、および EntityObject から継承されていないことを確認してください。

このコードを実行すると:

using System.Data.Entity; 
namespace EfTest
{
internal class Program
{
    private static void Main(string[] args)
    {
        using (var db = new PersonContext())
        {
            db.Persons.Add(new Person());
            db.SaveChanges();
        }
    }
}

public class PersonContext : DbContext
{
    public DbSet<Person> Persons { get; set; } //people ;)
}

public class Person : EfTest2.Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
}
}namespace EfTest2
{
public class Person
{
    public int Age { get; set; }
}

}

新しいタイプがそのベースと同じ名前を持つことができない理由を教えてください。

4

3 に答える 3

0

エラーにネストされたキーワードに焦点を当てます。EfTest2名前空間から削除し、名前空間を同じに保つことで、この問題が修正されると確信しています。もちろん、基本クラス名をPersonから別のものに変更する必要があります。

于 2013-03-19T20:59:33.953 に答える
0

EF には非常に複雑なマルチレイヤー マッピングがあり、これらのレイヤーの一部は外部に直接表示されません。これは、オブジェクトを EDM のエンティティ表現にマッピングする際の問題です。ポイントは、EF が完全なクラス名 (名前空間を含む) を使用するのではなく、裸のクラス名のみを使用しているため、Personクラスが衝突し、解決できるのは 1 つだけであるということです。

この動作の起源は、おそらく EF 4.0 にあり、POCO モデルのクラス作成を簡素化し、名前空間を EDMX から独立させるために使用されました。

于 2013-03-20T09:22:55.360 に答える
0

メインセッションの横にクラスを書くことはできないと思います。別の cs ファイルに分割する必要があります。そうすることで問題を解決しました。試すだけの価値があります

于 2013-04-25T19:15:47.223 に答える