タグ付けされた質問 「entity-framework」

ADO.NET Entity Framework、.NET Framework用のObject-Relational-Mapping(ORM)ツールに関する質問。該当する場合は、バージョン固有のタグを追加してください。Entity-Framework-coreの質問には、このタグを使用しないでください。代わりにentity-framework-coreを使用してください。

1
Database.BeginTransactionとTransactions.TransactionScope
System.Transactions.TransactionScopeとEF6の違いは何Database.BeginTransactionですか? 誰かが小さな例を挙げたり、明確な違いがあるときにどちらを使用するかを説明したりできますか? PS:私のプロジェクトでは、EF6を使用しています。私はすでにドキュメントを読みましたが、あまり役に立ちませんでした。例も調べましたが、どちらかSqlConnection.BeginTransactionと言えば使用されており、MSはこれDatabase.BeginTransactionをEF6に導入しました。

7
LinqSelectでタプルを作成する
私はC#と.NET Framework 4.5.1を使用して、Entity Framework6.1.3を使用してSQLServerデータベースからデータを取得しています。 私はこれを持っています: codes = codesRepo.SearchFor(predicate) .Select(c => new Tuple<string, byte>(c.Id, c.Flag)) .ToList(); そして、それを実行すると、次のメッセージが表示されます。 LINQ to Entitiesでは、パラメーターのないコンストラクターと初期化子のみがサポートされています。 私が見つけたすべての例はほとんどこのようなものであるため、タプルをどのように作成する必要があるのか​​わかりません。 私はこれを試しました: codes = codesRepo.SearchFor(predicate) .Select(c => Tuple.Create(c.Id, c.Flag)) .ToList(); そして、このエラーが発生します: LINQ to Entitiesは、メソッド 'System.Tuple`2 [System.String、System.Byte] Create [String、Byte](System.String、Byte)'メソッドを認識せず、このメソッドをストア式に変換できません。 問題はどこだ?

5
オブジェクトがEntityFrameworkのデータコンテキストに既にアタッチされているかどうかを確認することはできますか?
特定のコンテキストにすでにアタッチされているオブジェクトを次の方法でアタッチしようとすると、次のエラーが発生しますcontext.AttachTo(...)。 同じキーを持つオブジェクトは、ObjectStateManagerにすでに存在します。ObjectStateManagerは、同じキーを持つ複数のオブジェクトを追跡することはできません。 次のようなことを達成する方法はありますか? context.IsAttachedTo(...) 乾杯! 編集: ジェイソンが概説した拡張方法は近いですが、私の状況では機能しません。 私は別の質問への回答で概説されている方法を使用していくつかの作業をしようとしています: Linq to Entitiesを使用して、最初に行を取得せずにテーブルから1つ以上の行を削除するにはどうすればよいですか? 私のコードは次のようになります。 var user = new User() { Id = 1 }; context.AttachTo("Users", user); comment.User = user; context.SaveChanges(); 同じメソッドを使用してダミーUserオブジェクトをアタッチしようとするそのユーザーのために何か他のことをする場合を除いて、これは正常に機能します。以前にそのダミーユーザーオブジェクトを添付したため、これは失敗します。どうすればこれを確認できますか?

10
Linq to Entitiesを使用した「Contains()」回避策?
Silverlight ADO.Net Data ServicesクライアントAPI(したがって、Linq To Entities)を使用して、where句のIDのリストを使用するクエリを作成しようとしています。誰かがサポートされていないContainsの回避策を知っていますか? 私はこのようなことをしたい: List<long?> txnIds = new List<long?>(); // Fill list var q = from t in svc.OpenTransaction where txnIds.Contains(t.OpenTransactionId) select t; これを試しました: var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t; しかし、「メソッド 'Any'はサポートされていません」というメッセージが表示されました。

3
Entity Framework SaveChanges()とSaveChangesAsync()およびFind()とFindAsync()
上記の2つのペアの違いを探していましたが、それについて明確に説明している記事や、どちらを使用するかについての記事は見つかりませんでした。 だから、何の違いであるSaveChanges()とはSaveChangesAsync()? そして、の間Find()とFindAsync()? サーバー側では、Asyncメソッドを使用するときに、も追加する必要がありawaitます。したがって、サーバー側では非同期ではないと思います。 クライアント側のブラウザでUIがブロックされるのを防ぐのに役立つだけですか?それとも、それらの間に賛否両論がありますか?

3
Entity Framework Code First FluentAPIを使用してテーブル名を指定する方法
エンティティがあり、別の名前のデータベーステーブルにマップするようにEntityFrameworkを構成します。 これは、Code First DataAnnotations(DataAnnotations.Schema.TableAttribute)を使用して簡単に実行できます。 しかし、制限のため、Code First Fluent APIを使用する必要があります(私のドメインオブジェクトは外部クライアントによって使用されるため、テクノロジー固有のものであってはなりません-たとえば、DataAnnotationsへの参照があります) MSDNで検索しましたが、何も見つかりませんでした。それで、それは可能で、どのようにですか? ありがとうございました。

21
データベースが作成されてから、「ApplicationDbContext」コンテキストをサポートするモデルが変更されました
まず第一に、私は他のどこでもこのエラーを見たことがなく、それは複製ではないと思うので、最初に全体の状況を読んでください。 すべてが正常に機能していたので、モデルクラスの1つを更新しようとしました(Appクラスで、更新はコメントのままになっています)。これを以下にリストします。そしてブーム私はこの醜いエラーがありました。 データベースが作成されてから、「ApplicationDbContext」コンテキストをサポートするモデルが変更されました。Code First Migrationsを使用してデータベースを更新することを検討してください(http://go.microsoft.com/fwlink/?LinkId=238269)。System.Data.Entity.CreateDatabaseIfNotExists 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf1.b__e()at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()atSystem.Data.Entity。 Internal.LazyInternalContext.b__4(InternalContext c)at System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1 action)at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)at System.Data.Entity.Internal.Linq.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1.Microsoft.AspNet.Identityの1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryableSystem.Data.Entity.QueryableExtensions.Include [T、TProperty](IQueryable 1 source, Expression1パス)のSystem.Data.Entity.Infrastructure.DbQuery 1ソースのInclude(文字列パス)、文字列パス)。 EntityFramework.UserStore 6.GetUserAggregateAsync(ExpressionMicrosoft.AspNet.Identity.EntityFramework.UserStoreで1つのフィルタ)6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager前の位置からスタックトレースのMicrosoft.AspNet.Identity.UserManager`2.d__12.MoveNext()---終了時2.FindByNameAsync(文字列のuserName)ここで例外がスローされました--- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスクタスク)at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク)at ControlPanel.Web.Controllers.AccountController.d__2.MoveNext()in d :\ Projects \ FULL \ Control Panel …

4
アプリケーションの構成ファイルの接続文字列「MyConnection」に、必要なproviderName属性が含まれていません。」
私は使用しますEntity Framework Code First、 私の接続文字列は構成ファイルにあります: <connectionStrings> <clear/> <add name="ApplicationServices" connectionString="Data Source=PC-X;Initial Catalog=MYdb;Integrated Security=True"/> </connectionStrings> データ(DBを作成する必要があるもの)にアクセスしようとすると、次のエラーが発生します。 アプリケーションの構成ファイルの接続文字列「ApplicationServices」に、必要なproviderName属性が含まれていません。」 何が足りないのですか?

8
ジェネリック拡張メソッド内で文字列列名を使用してIQueryableにOrderByを適用するにはどうすればよいですか?
public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName) where T : EntityObject { var param = Expression.Parameter(typeof(T), "o"); var body = Expression.PropertyOrField(param,columnName); var sortExpression = Expression.Lambda(body, param); return query.OrderBy(sortExpression); } OrderByのタイプはsortExpressionから推測されないため、実行時に次のように指定する必要があります。 var sortExpression = Expression.Lambda<T, TSortColumn>(body, param); または return query.OrderBy<T, TSortColumn>(sortExpression); ただし、TSortColumnは実行時にのみ決定できるため、これは不可能だと思います。 これを回避する方法はありますか?

2
非同期PartialViewにより、「HttpServerUtility.Executeblocked…」例外が発生します
IEnumerable<Post>非同期を使用してデータベースからを取得しようとする部分的なビューがあります... 方法 public static class PostService { public static int PostsPerPage = 50; public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0) { return await entityFrameworkDbContext.Posts .ToListAsync(); } } PartialView public async Task<ActionResult> Recent(int page = 0) { return PartialView(await PostService.GetRecentAsync(page)); } そして、私がそれを呼び出そうとすると @Html.Action("Recent", "Post") 次の例外が発生します 非同期操作が完了するのを待っている間、HttpServerUtility.Executeがブロックされました。 説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーの詳細とコードの発生場所については、スタックトレースを確認してください。 例外の詳細:System.InvalidOperationException:HttpServerUtility.Executeは、非同期操作が完了するのを待っている間にブロックされました。 なぜこのエラーが発生するのですか?それはうまくいかないのですか?

5
コードの最初の移行を無効にするにはどうすればよいですか
EF5にコードファーストのエンティティモデルがあります。しかし、データベースの変更を手動で管理したいのですが、EFに既存のデータベースとそのすべてのデータを変更させたくありません。しかし、EFマッピングとデータベースで並行して変更を加えると、EFは適切に動作することを拒否し、コードファーストマイグレーションを使用する必要があると通知します。これをオフにするにはどうすればよいですか?


7
エンティティフレームワークで追跡されたエンティティをクリアするにはどうすればよいですか
エンティティの大きな山を実行する修正コードを実行しています。速度が低下するにつれて、コンテキスト内の追跡されるエンティティの数が反復ごとに増加するためです。時間がかかる可能性があるため、最後に変更を保存しています。各反復の。各反復は独立しており、以前にロードされたエンティティを変更しません。 変更の追跡をオフにできることはわかっていますが、一括挿入コードではないため、オフにしたくありませんが、エンティティを読み込んでいくつかの計算を行い、数値が正しくない場合は、新しい数値を設定して更新/削除/作成しますいくつかの追加エンティティ。反復ごとに新しいDbContextを作成でき、おそらく同じインスタンスですべてを実行するよりも高速に実行できることはわかっていますが、もっと良い方法があるのではないかと考えています。 したがって、問題は次のとおりです。以前にdbコンテキストにロードされたエンティティをクリアする方法はありますか?

5
リポジトリを削減してルートを集約する
現在、データベース内のほぼすべてのテーブルのリポジトリがあり、それらを集約ルートのみに縮小することで、DDDとさらに整合させたいと考えています。 次のテーブルがあると仮定しましょう。 UserとPhone。各ユーザーは1つ以上の電話を持っている可能性があります。集約ルートの概念がなければ、私は次のようなことをするかもしれません: //assuming I have the userId in session for example and I want to update a phone number List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId); phones[0].Number = “911”; PhoneRepository.Update(phones[0]); 集合根の概念は、実際よりも紙の上で理解する方が簡単です。ユーザーに属していない電話番号を取得することは決してないので、PhoneRepositoryを廃止し、電話関連のメソッドをUserRepositoryに組み込むことは理にかなっていますか?答えが「はい」であると仮定して、前のコードサンプルを書き直します。 UserRepositoryに電話番号を返すメソッドを設定することはできますか?または、常にユーザーへの参照を返し、ユーザーを介して関係をトラバースして電話番号に到達する必要があります。 List<Phone> phones = UserRepository.GetPhoneNumbers(userId); // Or User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone どちらの方法で電話を入手したとしても、そのうちの1つを変更したとすると、どうすれば更新できますか?私の限られた理解は、ルートの下のオブジェクトはルートを介して更新する必要があるということです。これにより、以下の選択肢1に進むことができます。これはEntityFrameworkで完全に機能しますが、コードを読んでいると、Entity Frameworkがグラフ内の変更されたオブジェクトを監視しているにもかかわらず、実際に何を更新しているのかわからないため、これは非常にわかりにくいようです。 UserRepository.Update(user); // …

5
最初にEFコードと.netコアを使用して移行のスクリプトを生成できますか?
.Net Coreを使用してMVCアプリケーションを構築しており、移行のスクリプトを生成する必要があります。 EF6でコマンドを実行しました update-database -script しかし、.net Coreで同じことをしようとすると、次の例外がスローされます。 更新-データベース:パラメーター名 'script'に一致するパラメーターが見つかりません EFコアに相当するものがあるかどうか知っていますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.