2016-06-28 13 views
3

私はEF 7とも呼ばれるEFコアを使用していますか?とにかく、特定のテーブルで特定できないカスタム結果を返すストアドプロシージャがあります。これらの結果にどのようにアクセスする必要があり、SQLコマンドをどのように呼び出すべきですか?EFコアストアドプロシージャのカスタム結果

通常は.FromSqlを使用する必要がありますが、これはエンティティでのみ使用できます。 _context.User.FromSql()。私はそれのための実体を持っていません。

私は結果のためにdbset/entityを構築しようとしましたが、関連するテーブルはなく、 "Key"もありません。どのようにカスタム結果のデータを解析するのですか?

+0

EFコアプレリリースはまだです:

CREATE TABLE [dbo].[banana_hoard] ( [id] INT NOT NULL PRIMARY KEY IDENTITY (1,1), [owner] NVARCHAR(64) NOT NULL, [bananas] BIGINT NOT NULL ) 

をあなたはこれは次のように行IDを返さないクエリを持つことができます。多くの欠けていることがあります。注文データアノテーションはまだ追加されていません。個人的には、私はストアドプロシージャにEFを使用しません。効率を犠牲にする無駄な余分なレイヤーです。 –

+0

ありがとう、私は任意のアイデアに公開されています。代わりに私は何を使うことができますか?プロジェクト全体をスクラップし、別のバージョンのefで再起動する唯一のオプションはありますか? – Samir

+0

私はMVCコアも使用しています。 – Samir

答えて

0

ストアドプロシージャの結果に対して偽のエンティティを作成できます。ストアドプロシージャの結果でキー値が一意でない場合でも、キーとして任意のプロパティを設定できます。例えば

次のような表がある場合:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     using (var db = new MonkeyDbContext()) 
     { 
      var sp_results = db.search.FromSql(@"execute <YOUR_STORED_PROC>"); 
      str_result = String.Join("\n", sp_results.Select(a => JsonConvert.SerializeObject(a))); 
      Console.WriteLine("stored proc result :\n" + str_result); 
     } 
    } 
} 

public class MonkeyDbContext : DbContext 
{ 
    public DbSet<StoredProcRow> search { get; set; } 

    protected override void OnConfiguring (DbContextOptionsBuilder builder) 
    { 
     builder.UseSqlServer(@"Server=(localdb)\monkey_db;Database=monkey_db;Trusted_Connection=True;"); 
    } 
} 

public class StoredProcRow 
{ 
    [Key] 
    public string Owner { get; set; } 
    public long Bananas { get; set; } 
} 
関連する問題