Chu*_*ris 39 c# linq entity-framework ef-code-first
那么简单.我需要使用Code First 创建一个View.我在Google和SO上都没有发现任何相关信息.有没有办法实现这个目标?
我需要使用linq创建和查询该视图,因此它不是使用数据库创建脚本创建它的解决方案,例如:
var results = from c in db.Customer
join v in db.MyView on c.Id equals v.Id
select c;
Run Code Online (Sandbox Code Playgroud)
解决方案也是可以接受的.我需要一种方法来查询实体与非常量/非实体值.
Fre*_*red 70
您必须手动创建视图,就像AnatoliiG所述.(向表中添加索引).
您将视图的名称添加为类的属性
[Table("UserDTO")]
public class UserDTO
{
/* Class code here */
}
Run Code Online (Sandbox Code Playgroud)
您可以通过在末尾指定-IgnoreChanges属性来创建空迁移
Add-Migration MigrationName -IgnoreChanges
Run Code Online (Sandbox Code Playgroud)
这为您提供了一个可以手动修改的空迁移脚本.
您可以使用db上下文在迁移脚本中执行代码
public partial class editUserDTO : DbMigration
{
public override void Up()
{
string script =
@"
CREATE VIEW dbo.UserDTO
AS SELECT p.PersonId AS UserId, p.FirstName, p.LastName, u.UserName
FROM dbo.Users u
INNER JOIN dbo.People p ON u.PersonId = p.PersonId";
BloggingContext ctx = new BloggingContext();
ctx.Database.ExecuteSqlCommand(script);
}
public override void Down()
{
BloggingContext ctx = new BloggingContext();
ctx.Database.ExecuteSqlCommand("DROP VIEW dbo.UserDTO");
}
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*ohn 18
在EF 6.1中(不确定是否在之前或之前),现在有一个Code First from Database
可以使用的选项,它也将映射到视图.
我个人有一个单独的垃圾项目,所以我可以从中取出我想要的代码而不影响我实际使用数据库的项目.使用它Add a New file to your project -> Data -> ADO.NET Entity Data Model
然后选择Code First From Database
选项并选择您的视图(如果需要,还可以选择其他表格)
它将创建它像Fred在他的答案中谈论的表映射,但会为你做所有代码,这很好.您可能想要更改索引和排序.
然后只需打电话给Sql(@"YOUR VIEW CREATE SQL HERE")
你,Up
然后加入Sql(@"DROP STATEMENT HERE")
你的Down
Ana*_*uza 11
您无法使用EF Code First方法创建视图.如果要创建视图,则在Seed
方法中执行创建sql脚本.但是你仍然无法将实体映射到这个视图,除了通过创建和删除与视图同名的表来破解模型.
一些有用的链接:
Tod*_*odd 11
1)没有DbSet,而是具有属性或扩展方法
A)财产
class YourContext
{
public IQueryable<YourView> YourView
{
get
{
return this.Database.SqlQuery<YourView>("select * from dbo.YourView");
}
}
}
Run Code Online (Sandbox Code Playgroud)
B)扩展方法
static class YourContextExtensions
{
public static IQueryable<YourView>(this YourContext context)
{
return context.Database.SqlQuery<YourView>("select * from dbo.YourView");
}
Run Code Online (Sandbox Code Playgroud)
2)显然,您可以让迁移过程忽略某些dbsets
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
if (IsMigration)
modelBuilder.Ignore<YourViewTable>();
...
}
Run Code Online (Sandbox Code Playgroud)
(以上所有均未经测试)
归档时间: |
|
查看次数: |
50660 次 |
最近记录: |