私は単純にPOCOクラスでかなり標準的なセットアップをしています
public class Project
{
public int ProjectId { get; set; }
public string Name { get; set; }
public int? ClientId { get; set; }
public virtual Client Clients { get; set; }
}
彼らはインターフェイスを使用します
public interface IProjectRepository
{
IEnumerable<Project> Projects { get; }
}
ninjectがバインドするリポジトリとして構築されます
public class EFProjectRepository : IProjectRepository
{
private EFDbContext context = new EFDbContext();
public IEnumerable<Project> Projects
{
get { return context.Projects; }
}
}
実際のコンテキストは、単にDbContextです
public class EFDbContext : DbContext
{
public DbSet<Project> Projects { get; set; }
}
コードの最初の移行を有効にしようとすると、次のエラーが表示されます
私は他のプロジェクトでこの正確なプロセスを実行しましたが、エラーはありませんでした。これはローカルのSQL Serverデータベースに接続しています。接続文字列に問題はないようです。このエラーをオンラインで検索しましたが、解決策はセットアップに直接関係しない質問に答えているようです。
この問題は、POCOクラスの1つがDbContextで宣言されていない場合に発生する可能性があります。
私はそれらを追加し、エラーはなくなりました
Task
POCOクラスの名前を、組み込みの.NET名との関連付けのために変更しましたSystem.Threading.Tasks
。ただし、リレーションシップが存在する「TaskTimeLog」POCOではこれを変更していません。コードを実行すると、「TaskTimeLog」POCOの「Task」プロパティにエラーが表示されませんでした。これは、スレッド化キーワードと最初に名前を変更した理由に関連付けられたためです。
同じ問題が発生しましたが、原因はType
型のプロパティを持つPOCOクラスでした。
ゲームに遅れて...しかしそれが助けたら...
私はこの同じ問題を抱えていて、すべてがうまく機能していましたが、この問題が現れたので、クラスの1つに次を追加しました
public HttpPostedFileBase File { get; set; }
それはそれを壊したようだ。
以下を使用して、これをデータベースにマップしないようにしました。
[NotMapped]
public HttpPostedFileBase File { get; set; }
次のusingステートメントを追加する必要があります。
using System.ComponentModel.DataAnnotations.Schema;
お役に立てれば
他の回答で解決策を見つけられない人のために、あるモデルにインスタンスを持つクラスから派生クラスを作成すると、このエラーが発生しました。リクエストでコンテキストを最初に使用したときに例外が発生しました。
これは、動作を再現する簡略化された例です。モデルは私のコンテキストではDbSetです。
public class Model
{
public int Id { get; set; }
public Duration ExposureDuration { get; set; }
}
public class Duration
{
public int Value { get; set; }
public string Unit { get; set; }
}
//Adding this will cause the exception to occur.
public class DurationExtended : Duration
{ }
これは進行中の作業中に発生しました。モデルプロパティExposureDurationをDurationExtended型に変更すると、すべてが再び機能しました。
私はこのエラーを受け取りました:
値をnullにすることはできません。パラメーター名:entitySet
2つの異なるDbContextからのデータを結合しようとしています。
var roles = await _identityDbContext.Roles
.AsNoTracking()
.Take(1000)
.Join(_configurationDbContext.Clients.ToList(),
a => a.ClientId,
b => b.Id,
(a,b) => new {Role = a, Client = b})
.OrderBy(x => x.Role.ClientId).ThenBy(x => x.Role.Name)
.Select(x => new RoleViewModel
{
Id = x.Role.Id,
Name = x.Role.Name,
ClientId = x.Role.ClientId,
ClientName = x.Client.ClientName
})
.ToListAsync();
修正方法は、示されているようにToList
を追加することです。次に、データベースではなくコードで結合が行われます。
「ExpenseModel」にはいくつかのプロパティがありますが、そのうちの1つは...
public virtual Type TypeId {get; set;}
「Type」propertyTypeのために上記と同じエラーが発生したため、変更しました
"Type" => "ExpenseType"そしてそれは機能しました... :-)
public virtual ExpenseType TypeId {get; set;}
ExpenseModel.cs
public class ExpenseTypes
{
[Key]
public int Id { get; set; }
public string TypeName { get; set; }
public string Description { get; set; }
}
プロジェクトファイルから<Generator>EntityModelCodeGenerator</Generator>
行を削除します。
これを確認してください https://www.c-sharpcorner.com/UploadFile/5d065a/poco-classes-in-entity-framework/
私はこの同じ問題に遭遇し、そのように解決しました:
モデルクラスのエラー:
public class UserInformation
{
public string ID { get; set; }
public string AccountUserName { get; set; }
public HttpPostedFileBase ProfilePic { get; set; }
}
モデルクラスにエラーなし
public class UserInformation
{
public string ID { get; set; }
public string AccountUserName { get; set; }
public string ProfilePicName { get; set; }
}
ProfilePic
プロパティタイプをHttpPostedFileBase
からstring
に更新すると、私の問題は解決しました。タイプがstring
、int
、double
、またはその他の基本/標準タイプではないプロパティがある場合は、そのようなプロパティを置き換えるか、SQLがより多いタイプに更新します。受け入れる可能性が高い。
私の場合、IanaTimeZoneという別のモデルクラスを参照する必要がありましたが、
public virtual IanaTimeZone Timezone { get; set; }
ラッシュのうち、私はこれを入力しました:
public virtual TimeZone Timezone { get; set; }
vSはSystem.TimeZoneであると見なしたが、EF6がエラーをスローしていたため、正常にコンパイルされました。愚かなことですが、理解するのに時間がかかりましたので、これは誰かを助けるかもしれません。
私は同じ問題を抱えていましたが、解決策を見つけるのにかなり時間がかかりました。私たちの場合、エンティティを処理するために個別のプロジェクトを作成しました。パッケージマネージャーコンソールのデフォルトプロジェクトがエンティティを処理するプロジェクトであったとしても、このプロジェクトを動作させるためにデフォルトプロジェクトとして設定する必要があります。
これが他の誰かに役立つことを願っています。
タイプTypeの変数を宣言したときにこのエラーが発生しました。これはおそらく、DBでサポートされていない複雑なタイプであるためです。
文字列に変更すると、エラーはなくなりました
public class Sample
{
public int SampleID {get;set;}
public Type TypeInfo {get; set;} //This caused the error,
//because Type is not directly convertible
//in to a SQL datatype
}