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

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

15
自己参照ループが検出されました-WebApiからブラウザにデータを取り戻します
Entity Frameworkを使用していますが、親と子のデータをブラウザーに取得する際に問題が発生します。これが私のクラスです: public class Question { public int QuestionId { get; set; } public string Title { get; set; } public virtual ICollection<Answer> Answers { get; set; } } public class Answer { public int AnswerId { get; set; } public string Text { get; set; } public int QuestionId …

11
EntityFrameworkは実行時に接続を変更します
モデルとDALアセンブリを参照するWebAPIプロジェクトがあります。ユーザーにはログイン画面が表示され、そこでさまざまなデータベースを選択できます。 次のように接続文字列を作成します。 public void Connect(Database database) { //Build an SQL connection string SqlConnectionStringBuilder sqlString = new SqlConnectionStringBuilder() { DataSource = database.Server, InitialCatalog = database.Catalog, UserID = database.Username, Password = database.Password, }; //Build an entity framework connection string EntityConnectionStringBuilder entityString = new EntityConnectionStringBuilder() { Provider = database.Provider, Metadata = Settings.Default.Metadata, ProviderConnectionString …

2
Entity Framework CoreモデルでC#8.0 Nullable参照型を使用する方法
.NET Core 3.0プロジェクトでC#8.0 Nullable参照型を有効にしています。プロジェクトはEntity Framework Core 3.0を使用してデータベースにアクセスします。 以下は、タイトルがnullであってはならないデータモデルです。 public class Vehicle { public int Id { get; private set; } public string Title { get; private set; } // Entity Framework Core is instructed to bind to the private _drivers field in a configuration builder private readonly List<Driver> _drivers = …

2
.NET Core 3.0 Entity Frameworkでグループ参加を実行するにはどうすればよいですか?
.NET Core 3.0の変更により、 ... NavigationExpandingExpressionVisitor 'が失敗しました。これは、EF Coreのバグまたは制限を示している可能性があります。詳細については、https://go.microsoft.com/fwlink/?linkid = 2101433を参照して ください。)---> System.InvalidOperationException:LINQ式 'GroupJoin、...の処理 これは非常に単純なクエリなので、.NET CORE 3.0で実行する方法が必要です。 var queryResults1 = await patients .GroupJoin( _context.Studies, p => p.Id, s => s.Patient.Id, (p, studies) => new { p.DateOfBirth, p.Id, p.Name, p.Sex, Studies =studies.Select(s1=>s1) } ) .AsNoTracking().ToListAsync(); 私は基本的に、Studyを患者に結合するLinqクエリ(または上記のメソッド構文)を探しており、Studyを空のリストに設定するか、特定の患者のスタディがない場合はnullを設定します。 何か案は?これは.NET Core 2.2で機能していました。また、上記のMSFTリンクは、重要な変更がクライアント側の評価に関連しており、生成されたクエリがテーブル全体を読み取ることを回避していることを示しています。ただし、この単純なクエリでは、結合はサーバー側で簡単に実行できるはずです。

3
Entity Framework Coreの強く型付けされたID
私は強く型付けされたIdクラスを作ろうとしていますが、これは内部で「long」を保持しています。以下の実装。私のエンティティでこれを使用している問題は、Entity Frameworkから、プロパティIDが既にマッピングされているというメッセージが表示されることです。IEntityTypeConfiguration以下を参照してください。 注:私は厳密なDDD実装を目指していません。したがって、コメントや回答の際には、このことを覚えておいてください。型付けの背後にあるID全体Idは、すべてのエンティティでIdを使用するように強く型付けされているプロジェクトにアクセスする開発者向けです。もちろんlong(またはBIGINT)に翻訳されますが、他の人にとっては明らかです。 動作しないクラスと構成の下。リポジトリはhttps://github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31にあります。 Id(現在コメントアウトされている)のクラス:https : //github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31/blob/master/Source/Common/Kf.CANetCore31/DomainDrivenDesign/Id.cs EntityおよびValueObjectクラス(EntityプロパティIdのタイプはId.cs(上)でした:https : //github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31/tree/master/Source/Common/Kf.CANetCore31/DomainDrivenDesign 構成:https : //github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31/tree/master/Source/Infrastructure/Persistence/Kf.CANetCore31.Infrastructure.Persistence.Ef/EntityTypeConfigurations Idクラスの実装(これは解決策が見つかるまでアイデアを放棄したため、現在は使用されていません) namespace Kf.CANetCore31.DomainDrivenDesign { [DebuggerDisplay("{DebuggerDisplayString,nq}")] [Obsolete] public sealed class Id : ValueObject { public static implicit operator Id(long value) => new Id(value); public static implicit operator long(Id value) => value.Value; public static implicit operator Id(ulong value) => …

2
Entity Frameworkのユーザー定義テーブルが不正なクエリを生成する
私は現在、Entity Framework 6とおそらくADO.NETのバグを経験していると思います。期限があるので、このバグが修正されるのを待つことができるかどうかわかりません。うまくいけば、誰かが私にクリーンな作業を手伝ってくれると思います。 問題は、クエリで値1と5が0.01と0.05になるはずの場所で使用されることです。しかし、奇妙なことに0.1は機能しているようです 生成されたクエリは現在次のとおりです(SQL Server Profilerから取得) declare @p3 dbo.someUDT insert into @p3 values(NULL,5) insert into @p3 values(5,0.10) insert into @p3 values(NULL,1) insert into @p3 values(1,2) exec sp_executesql N'Select * from @AName',N'@AName [dbo].[someUDT] READONLY',@AName=@p3 正しいコードは次のとおりです。 declare @p3 dbo.someUDT insert into @p3 values(NULL,0.05) insert into @p3 values(0.05,0.10) insert into @p3 values(NULL,0.01) …

6
FromSqlRawを介してEF Core 3.0でストアドプロシージャを呼び出す方法
最近、EF Core 2.2からEF Core 3.0に移行しました。 残念ながら、エンティティを返すストアドプロシージャを呼び出す方法が見つかりませんでした。 EF Core 2.0では、次のことが可能でした。 var spParams = new object[] { "bla", "xx" }; var createdPath = ModelContext.Paths.FromSql("AddNodeWithPathProc @p0, @p1", spParams).Single(); EF Core 3.0では、メソッドFromSQLはに置き換えられていFromSqlRawます。ただし、ストアドプロシージャを正常に呼び出してから、値を処理できませんでした。これは、ストアード・プロシージャーがデータベースにデータを挿入するときに役立ちます。 EF Core 3.0では、次のコードを使用します。 var createdPath = ModelContext.Paths.FromSqlRaw("AddNodeWithPathProc @p0, @p1", spParams).Single(); ただし、生成されたSQLは無効であり、次のように見えるため、例外がスローされます。 exec sp_executesql N'SELECT TOP(2) [p].[PathId], [p].[Level], [p].[NodeId], [p].[NodePath], [p].[NodePathString] FROM ( …

3
ローカル開発を中断せずにEF CoreでAzure SQL Serverエディションを指定する
Entity Framework Core は、Azure SQLサーバーのエディションを変更するためのメソッドHasServiceTierおよびHasPerformanceLevelを導入しました。次のようにOnModelCreatingで使用できます。 protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.HasServiceTier("Basic"); modelBuilder.HasPerformanceLevel("Basic"); } Add-Migration Add-Migrationを使用すると、次のような移行が行われます。 public partial class ChangedDatabaseServiceTierToBasic : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AlterDatabase() .Annotation("SqlServer:EditionOptions", "EDITION = 'Basic', SERVICE_OBJECTIVE = 'Basic'"); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.AlterDatabase() .OldAnnotation("SqlServer:EditionOptions", "EDITION = 'Basic', …

2
コンシューマータイプのアプリケーションでDataContextインスタンスをキャッシュする方法は?
プロバイダーが提供するSDKを使用して、簡単に統合できるアプリケーションがあります。このSDKはAMQPエンドポイントに接続し、メッセージをコンシューマーに配信、キャッシュ、および変換するだけです。以前、この統合はデータソースとしてXMLを使用するHTTP経由で行われ、古い統合には、WebリクエストごととマネージスレッドIDごとの2つのDataContextキャッシュ方法がありました。(1) ただし、SDKがすべての接続ロジックを実行し、コンシューマーを定義するだけなので、HTTP経由ではなく、AMQPが透過的になり、「Webリクエストごとに」DataContextをキャッシュするオプションがないため、管理スレッドごとにのみidが残されます。責任パターンのチェーンを実装したので、更新が来ると、DataContextを使用して新しい更新に従ってデータベースを更新するハンドラーの1つのパイプラインに配置されます。パイプラインの呼び出し方法は次のようになります。 public Task Invoke(TInput entity) { object currentInputArgument = entity; for (var i = 0; i < _pipeline.Count; ++i) { var action = _pipeline[i]; if (action.Method.ReturnType.IsSubclassOf(typeof(Task))) { if (action.Method.ReturnType.IsConstructedGenericType) { dynamic tmp = action.DynamicInvoke(currentInputArgument); currentInputArgument = tmp.GetAwaiter().GetResult(); } else { (action.DynamicInvoke(currentInputArgument) as Task).GetAwaiter().GetResult(); } } else { currentInputArgument = …

2
FromSqlRawとEF Core 3.1のストアドプロシージャに含める
だからここに契約があります-私は現在EF Core 3.1を使用していて、エンティティがあるとしましょう: public class Entity { public int Id { get; set; } public int AnotherEntityId { get; set; } public virtual AnotherEntity AnotherEntity { get; set; } } DbSet<Entity> Entities通常の方法でアクセスするときは、次のようなAnotherEntityを含めます。 _context.Entities.Include(e => e.AnotherEntity) そしてこれはうまくいきます。なぜでしょうか?次に私は行きます: _context.Entities.FromSqlRaw("SELECT * FROM Entities").Include(e => e.AnotherEntity) これも機能します。どちらも、AnotherEntityで結合された同じオブジェクトのコレクションを返します。次に、SELECT * FROM EntitiesspGetEntitiesという名前の同じクエリで構成されるストアドプロシージャを使用します。 _context.Entities.FromSqlRaw("spGetEntities") 何だと思う?これも機能します。同じ出力が得られますが、明らかにAnotherEntityに参加していません。ただし、次のようにインクルードを追加しようとすると、 _context.Entities.FromSqlRaw("spGetEntities").Include(e => …

1
Entity Framework Core 3.0のパフォーマンスへの影響(コレクションナビゲーションプロパティを含む)(デカルト爆発)
EF Core 2.2をEF Core 3.0にアップグレードした後、大きなパフォーマンスの問題に直面しています。単一のコレクションナビゲーションプロパティと数百のフィールドを持つ単純なデータモデルを想像してみてください(現実はさらに暗く見えます)。 public class Item { [Key] public int ItemID {get;set;} public ICollection<AddInfo> AddInfos {get;set;} ... // consisting of another 100+ properties! } そして public class AddInfo { [Key] public int AddInfoID {get;set;} public int? ItemID {get;set;} public string SomePayload {get;set;} } アイテムの取得中、次のようにクエリを実行します。 ... var myQueryable = …

2
複数のユーザータイプのID-DbContextデザイン
.NET CoreのIdentityパッケージIdentityUser<Guid>を、単一のクラスで拡張された複数のクラスで使用しようとしていますUserRole。 UserStore<T>ユーザータイプごとに拡張する複数のクラスと、拡張する1つのクラスがありますRoleStore<UserRole>。 以下は私のstartup.csです: services.AddIdentity<InternalUser, UserRole>(IdentityOptions) .AddDefaultTokenProviders() .AddUserStore<InternalUserStore>() .AddRoleStore<GenericUserRoleStore>(); services.AddIdentityCore<Contractor>(IdentityOptions) .AddRoles<UserRole>() .AddDefaultTokenProviders() .AddUserStore<ContractorUserStore>() .AddRoleStore<GenericUserRoleStore>(); services.AddIdentityCore<Homeowner>(IdentityOptions) .AddRoles<UserRole>() .AddDefaultTokenProviders() .AddUserStore<HomeownerUserStore>() .AddRoleStore<GenericUserRoleStore>(); 私DbContextは延長していませんIdentityDbContext: public sealed class EntityDbContext: DbContext { } 複数のエラーが発生したため、以下を追加しましたDbContextが、コメント化しました。 public DbSet<IdentityUserClaim<Guid>> UserClaims { get; set; } public DbSet<IdentityUserRole<Guid>> UserRoles { get; set; } さまざまなエラーが発生します。 PluginType IUserStoreのインスタンス 'Dal.IdentityStores.InternalUserStore'およびPluginTypeのインスタンス 'RoleManager'でビルドエラーが発生しましたMicrosoft.AspNetCore.Identity.RoleManager 1[Models.Entities.Users.UserRole] - and …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.