80

このエラーを修正するのを手伝ってくれる人はいますか?

指定されたスキーマは無効です。エラー:

複数の CLR 型が EDM 型 'City_DAL' と一致するため、CLR 型から EDM 型へのマッピングがあいまいです。以前に発見された CLR タイプ 'CeossDAL.City_DAL'、新たに発見された CLR タイプ 'CeossBLL.City_DAL'。

私がDALを持っていて、これにはEFとBLLが含まれており、これにはDALの同じクラスが含まれていますが、名前空間が異なるという主な問題があり、これが問題の原因です

これらの問題を解決する方法がわかりません。助けてください。

また、EFでn層アーキテクチャを使用するためのサンプルを誰かが提供してくれれば幸いです

ありがとうございました

4

15 に答える 15

77

同じ修飾されていない名前のクラスを使用しないでください。EF はクラス名のみを使用して、EDMX にマップされた型を識別します (名前空間は無視されます)。これは、異なる名前空間から単一のモデルにクラスをマッピングできるようにする規則です。問題の解決策は、BLL でクラスに別の名前を付けることです。

于 2013-02-18T19:37:09.187 に答える
45

回避策: 2 つの同一のクラスのいずれかでプロパティを変更します。

EF は、クラス名とクラス プロパティで一致します。そのため、EF オブジェクトの 1 つでプロパティ名を変更したところ、エラーはなくなりました。

@Entrodusが他の回答の1つにコメントしたように:

EF 衝突は、2 つのクラスの名前が同じで、パラメーターのセットが同じである場合にのみ発生します。

于 2015-10-16T16:27:44.780 に答える
10

このMSDN フォーラムの質問が役立つ場合があります。BLL クラスと DAL クラスを別々のアセンブリに配置することをお勧めします。

于 2013-03-06T08:47:56.650 に答える
8

場合によっては、これは実際の問題というよりも症状です。私にとっては、最初に .ToList() を呼び出さずに Linq クエリ内で関数を呼び出そうとすると、通常ポップアップします。

たとえば、私をここに連れてきたエラーは、私がこれをしたために発生しました:

var vehicles = DB.Vehicles.Select(x => new QuickSearchResult()
{
    BodyText = x.Make + " " + x.Model + "<br/>"
    + "VIN: " + x.VIN + "<br/>"
    + "Reg: " + x.RegistrationNumber +"<br/>"
    + x.AdditionalInfo
    type = QuickSearchResultType.Vehicle,//HERE. Can't use an enum in an IQueryable.
    UniqueId = x.VehicleID
});

.ToList() を呼び出してから、各項目を反復処理して、型を割り当てる必要がありました。

于 2017-02-08T09:29:40.497 に答える
1

これは、質問された時点では利用できなかった可能性がありますが、別の解決策は、EDMX を削除して、コード ファーストのエンティティ データ モデルとして再作成することです。EF6 では、コード ファーストを使用して、競合を発生させることなく、異なるモデル名前空間から同じ名前の 2 つのクラスをマップできます。

Visual Studio (2013) でエンティティ データ モデルを作成するには、[追加] > [新しい項目...] > [ADO.NET エンティティ データ モデル] に移動します。「Code First from database」オプションを必ず選択してください。

于 2017-01-31T23:04:39.937 に答える
0

私にとってこれは、間違ったコンテキスト インスタンスで同じ名前の型にアクセスしようとしたためです。

両方言ってContextAContextB持っていSomeTypeます。ContextA.SomeTypeのインスタンスにアクセスしようとしていましたContextB

于 2018-05-13T17:19:46.903 に答える
0

エンティティモデルに「MyClass」という名前のクラスXがあり、同じWorkFolderまたは最初のクラスの拡張に「MyClass」という別のクラスがあると思います。それが私の問題であり、私はそれを修正します。

于 2019-02-01T12:53:29.747 に答える
-9

ダウンロードできる AutoMapper というライブラリがあります。ある型から別の型へのクラス マッピングを定義するのに役立ちます。

Mapper.CreateMap<Model.FileHistoryEFModel, DataTypes.FileHistory>();
Mapper.CreateMap<DataTypes.FileHistory, Model.FileHistoryEFModel>();
于 2015-02-09T12:07:58.007 に答える