問題タブ [entity-framework-6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - プロパティ タイプが変更されたときに識別子を更新しない
抽象型のプロパティを持つエンティティがあります。これにより、階層ごとのテーブルの継承を使用する 1 対 1 の関係が作成されます。すべてが正しく機能しているようです。
Item を作成し、Base
プロパティをConcreteOne
;に設定できます。すべてが正しく保存されます。ただし、更新しようとするBase
とConcreteTwo
、EFBase
はデータベース内のレコードを新しいユーザー値で更新しますが、型の識別子は更新されません。したがって、 の余分なデータConcreteTwo
は永続化されますが、ディスクリミネーターはまだConcreteOne
.
以下は、問題を明らかにする簡単な例です
変更が保存されると、EF は次の SQL を生成します。
[Discriminator] = 'ConcreteTwo'
したがって、ほぼ正しいですが、更新ステートメントで確認できると思います。私の期待は根拠のないものですか、それとも何か間違ったことをしていますか?
テストとして、table-per-type を使用してみましたが、予想どおり、エントリがテーブルから削除され、ConcreteOne
テーブルに追加されました。ConcreteTwo
それでうまくいきますが、私の実際のアプリケーションには少なくとも 7 つのサブタイプがあり、Base
プロパティを取得するための SQL ステートメントは非常に厄介です。可能であれば、TPHを使用してこれを実現したいと思います。
更新: 問題が EF5 と EF6 に存在することを確認しました。
c# - .Where(i => !i.IsDeleted) は SQL に変換されませんが、.Where(i => i.IsDeleted.Equals(false)) は変換されます
私は ASP.NET MVC 4 と Entity Framework 6 (Code First) を使用していますが、望ましくない/好きではない奇妙な動作があります:ブール型のプロパティを持つ
エンティティ クラスがあり、最初の 25 枚の画像を取得したいと考えています。これらは削除されないため、次のコードを使用しました。Images
IsDeleted
これは非常に遅かったので、もう少し詳しく調査したところ、Where(i => !i.IsDeleted)
すでにDBクエリがトリガーされ、すべての画像がロードされ(そして解析=>遅く)、チェックが「コード内」で行われることがわかりました。次に、Where(i => i.IsDeleted.Equals(false))
どれがうまく機能するかを試してみましたが、SQL経由でチェックが行われました。
最初の構文の方がはるかに好きなので、なぜそうなのか、またはこの問題を回避するにはどうすればよいですか?
これはおそらくEF 6ベータ版のバグですか、それともすべてのEFバージョンで発生しますか?
更新:
問題はキャストですIEnumerable<Image>
(Where
コードの同じ行ではありませんでしたが、簡単にするためにここで変更しました)が、これを使用して -keys を.OrderBy(...).ThenBy(...)
使用していますが、Func<T, TKey>
返さIOrderedEnumerable
れませんIOrderedQueryable
...
更新 2:キー
を使用して解決Expression<Func<T, TKey>>
...
c# - OrderBy(関数) は SQL に変換できません
メソッドに提供する動的ソートロジック(こちらを参照)を実装しました。Expression<Func<T, IComperable>>
OrderBy
今、EFが実際の型にIComperable
変換できないという問題があります。Func<T, IComperable>
型 'System.Int32' を型 'System.IComparable' にキャストできません。LINQ to Entities は、EDM プリミティブ型または列挙型のキャストのみをサポートします。
で
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ValidateAndAdjustCastTypes(TypeUsage toType, TypeUsage fromType, Type toClrType, Type fromClrType)
これを解決する方法はありますか?
現時点で見つけた唯一の方法はFunc<>
、 を実際の型として「実装」し、この型を の隣に保存して、リフレクションを介してFunc<>
呼び出すことです。OrderBy
しかし、それは私には非常に醜い(そして遅い?)ようで、現在の(残念ながらLINQ to objectsの場合のみ)ソリューションほど使いにくいです...
更新:この問題は、
戻ったときint
またはbool
でのみ発生するようです...Func<T, IComperable>
string
c# - Entityframework RC1 - 内部に作成された MetadataItem.Annotations - 代替案?
特定の型を参照している PropertyInfos のリストを取得するために、EF Beta1 で次のメソッドを使用しています。
ただし、最近リリースされた RC1 (を参照) では、System.Data.Entity.Core.Metadata.Edm.MetadataItem のAnnotations -Property が内部化されました。
私の簡単な回避策は、リフレクションを使用して内部プロパティにアクセスすることですが、リフレクション ハックなしで指定された NavigationProperty の PropertyInfo を取得する他の解決策があるかどうか疑問に思っています。
entity-framework - webapi が関連付けられたテーブルからすべてのデータを返さないようにする
メンバーが持つ各会社のレコードを持つ MemberCompany というテーブルがあります。モデルは以下。メンバー ID を渡す webapi メソッドを介してクエリを実行すると、デバッグ モードでそのメンバーの 1 つの会社が返されることがわかりますが、ブラウザーで実行すると、メンバーのリスト全体も返されることがわかります。2 つの参照テーブルなしで membercompany レコードのコレクションを返すことは可能ですか? これら 2 つのテーブルを含めるように最初のコードをコメントアウトしましたが、まだ応答に含まれているようです。
WebAPI
c# - EF6 ベータ 1 移行のバグの可能性があります。Codefirst 移行のデッドロック
EF データベースが削除され、モデルにいくつかの変更が加えられました。データベースを再作成したい。しかし、ef は私にいくつかの奇妙なメッセージを表示します。現在のモデルに一致するようにデータベースを更新できないため、最初に保留中のモデルの変更を Code-First 移行に書き込む必要があるとのことでした。しかし、保留中のモデルの変更を Code-First 移行に書き込もうとすると、保留中の移行をデータベースに適用する必要があると言われました。
-Sript
オプションも試しましたUpdate-Database
が、同じ結果が得られます。
私は何をすべきか?保留中の変更をモデルに戻しますか?
entity-framework - アセンブリ 'EntityFramework' から型 'System.Data.Entity.DbSetExtensions' を読み込めませんでした
entityframework 6.0.0-beta1 から 6.0.0-rc1 に更新され、MVC5 アプリケーションにログインすると、次のエラーが表示されます
私のcsprojには次の参照があります
web.config
これは以前は機能していましたが、新しいバージョンの System.Data.Entity.Design dll が必要ですか? またはweb.configでアセンブリのバージョンを変更しますか?
編集: Identity Framework 関係者は更新された dll をリリースして一致させる必要があるようですね?
entity-framework-6 - Microsoft.AspNet.Identity を rc1 にアップグレードした後、IdentityStoreManager が見つかりませんでした
Microsoft.AspNet.Identity.Core を 1.0.0-rc1 にアップグレードした後、Visual Studio 2013 の既定の MVC5 テンプレートによって生成される AccountController.cs および AppModel.cs クラスにいくつかのエラーが表示されます。
重大な変更を解決する方法を説明するリリース ノートはありますか?