【发布时间】:2020-12-18 18:48:43
【问题描述】:
我正在使用 EF Core“内存中”数据库,但无法模拟视图。
var options = new DbContextOptionsBuilder<MyContext>()
.UseInMemoryDatabase(databaseName: "TestDatabase")
.Options;
// Insert seed data into the database using one instance of the context
using (var context = new MyContext(options))
{
// insert test values into entities here (omitted)...
// I want some test values for a View
context.MyView.AddRange( viewEntity1, viewEntity, ... etc );
context.SaveChanges();
}
在运行时,尝试添加视图实体时,会引发以下异常:
System.InvalidOperationException:无法跟踪类型的实例 'MyView' 因为它没有主键。仅实体类型 可以跟踪主键。
我想模拟视图的原因是我想测试一些连接到视图的 LINQ 查询。
有什么想法吗?
// Entity
public class MyView
{
public string UserId {get;set;}
public int CentreId {get;set;}
}
// Context
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
modelBuilder.Entity<MyView>()
.HasNoKey()
.ToView("MyView");
}
【问题讨论】:
-
支持
MyView的类型是否具有名为Id的属性或具有主键属性的属性? EF 实体需要其中之一。 -
@BabakNaffas 不,它是在 OnModelCreating 中使用代码添加的:modelBuilder.Entity
().HasNoKey().ToView("MyView"); -
public class MyView { public string UserId {get;set;} public int CentreId {get;set;} }
-
根据docs.microsoft.com/en-us/ef/core/modeling/… 视图无法添加到上下文中。视图,我的定义,是只读的。
标签: c# entity-framework-core moq