yog*_*ing 7 entity-framework-6 entity-framework-core asp.net-core
我正在使用EF Core。我正在使用DbContext.Set()
方法,但它给了我错误 - “无法为 'MediaDate' 创建 DbSet,因为此类型未包含在上下文模型中。'”
下面是我的代码:
var context = new GoldentaurusContext();
DbSet<MediaDate> set = context.Set<MediaDate>();
mediaDateList = set.FromSql("[dbo].[sp_GetMediaDate]")
.Select(x => new SelectListItem { Text = x.DateText, Value = x.DateValue })
.ToList();
Run Code Online (Sandbox Code Playgroud)
MediaDate 类:
public class MediaDate
{
public string DateText { get; set; }
public string DateValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为什么要求我将MediaDate类添加到DbContext类?
请帮助我做错了什么?
小智 6
对于 DotNet Core 3.1+ 中的 EF,请确保将非表实体添加到OnModelCreating
您的重写中DbContext
并调用.HasNoKey()
Fluent API。这将允许您使用DataContext.Set<MediaData>().FromSqlRaw("dbo.MyStoredProc")
并返回实体列表来调用存储过程。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MediaData>().HasNoKey();
}
Run Code Online (Sandbox Code Playgroud)
您的 DB Context 类应如下所示。
public partial class DatabaseContext : DbContext
{
public DatabaseContext (string ConnectionString) : base(new DbContextOptionsBuilder().UseSqlServer(ConnectionString).Options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Query<MediaData>();
}
Run Code Online (Sandbox Code Playgroud)
使用模型构建器在 DatabaseContext 中添加模型。这就是我解决这个问题的方法
小智 1
一个简单的 DatabaseContext 看起来像这样:
using YourProject.Model;
using System.Data.Entity;
namespace YourProject.Data
{
public class DatabaseContext : DbContext
{
public DatabaseContext() :
base("name=YourDatabase")
{
}
public DbSet<MediaData> MediaDates{ get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
您始终需要将模型包含在 DatabaseContext 中才能创建 DbSet。确保您已声明正确的命名空间并导入正确的命名空间。
归档时间: |
|
查看次数: |
7230 次 |
最近记录: |