Entity framework 编辑数据库上下文以从相关实体获取名称
我是VS2019、EF和.net Core 3.1的新手,所以请耐心听我说 dbcontextEntity framework 编辑数据库上下文以从相关实体获取名称,entity-framework,dbcontext,Entity Framework,Dbcontext,我是VS2019、EF和.net Core 3.1的新手,所以请耐心听我说 dbcontext modelBuilder.Entity<Books>(entity => { entity.Property(e => e.Id).HasColumnName("id"); entity.Property(e => e.Createdon)
modelBuilder.Entity<Books>(entity =>
{
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Createdon)
.HasColumnName("createdon")
.HasColumnType("datetime")
.HasDefaultValueSql("(getdate())");
entity.Property(e => e.Goal)
.HasColumnName("goal")
.HasMaxLength(100)
.IsUnicode(false);
entity.Property(e => e.Grade)
.HasColumnName("grade")
.HasMaxLength(2)
.IsUnicode(false);
entity.Property(e => e.Subjectid).HasColumnName("subjectid");
entity.HasOne(d => d.Subject)
.WithMany(p => p.Books)
.HasForeignKey(d => d.Subjectid)
.HasConstraintName("FK_Books_Subjects");
});
modelBuilder.Entity<Subjects>(entity =>
{
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Createdby).HasColumnName("createdby");
entity.Property(e => e.Name)
.HasColumnName("name")
.HasMaxLength(50)
.IsUnicode(false);
});
modelBuilder.Entity(Entity=>
{
Property(e=>e.Id).HasColumnName(“Id”);
Property(e=>e.Createdon)
.HasColumnName(“createdon”)
.HasColumnType(“日期时间”)
.HasDefaultValueSql(“(getdate())”);
Property(e=>e.Goal)
.HasColumnName(“目标”)
.HasMaxLength(100)
.IsUnicode(假);
实体属性(e=>e.Grade)
.HasColumnName(“等级”)
.HasMaxLength(2)
.IsUnicode(假);
entity.Property(e=>e.Subjectid).HasColumnName(“Subjectid”);
entity.HasOne(d=>d.Subject)
.有许多(p=>p.书)
.HasForeignKey(d=>d.Subjectid)
.HasConstraintName(“FK_图书主题”);
});
modelBuilder.Entity(Entity=>
{
Property(e=>e.Id).HasColumnName(“Id”);
Property(e=>e.Createdby).HasColumnName(“Createdby”);
entity.Property(e=>e.Name)
.HasColumnName(“名称”)
.HasMaxLength(50)
.IsUnicode(假);
});
在这里,当我检索书籍时,我想从主题实体中获取主题名称。
不幸的是,我没有可用的EF设计模型(不知道为什么)。
是否可以通过dbcontext实现这一点?因此书籍和主题之间存在一对多的关系:每本书都有一个主题,即外键SubjectId所指的主题。每一个主题都是零本或多本书的主题 现在您需要书籍的(一些属性),每本书都有它的主题名称,也许还有一些其他的主题属性 如果Book类具有属性
虚拟主题Subject{get;set;}
,则可以使用该属性获取它。实体框架知道一对多关系,并知道如何将其转换为适当的(组)连接
如果类没有此属性,您应该自己执行连接:
使用虚拟财产
请加入你自己
如果你有一对多的关系,你就有一对多。要获取“具有零个或多个子项的项”,请使用GroupJoin
,要获取“具有外键引用的唯一父项的项”,请使用Join
var booksWithTheirSubjectNames = dbContext.Books.Join(dbContext.Subjects,
book => book.SubjectId, // from every Book take the foreign key
subject => subject.Id, // from every Subject take the primary key
// when they match, take the Book and the Subject to make one new object:
(book, subject) => new
{
Id = book.Id,
Title = book.Title,
...
Subject = new
{
Name = book.Subject.Name,
Description = book.Subject.Description,
...
},
});
var booksWithTheirSubjectNames = dbContext.Books
// only if you don't want all Books
.Where(book => ...)
.Select(book => new
{
// Select the Book properties that you plan to use:
Id = book.Id,
Title = book.Title,
...
// Select the subject properties that you plan to use
Subject = new
{
Name = book.Subject.Name,
Description = book.Subject.Description,
...
},
});
var booksWithTheirSubjectNames = dbContext.Books.Join(dbContext.Subjects,
book => book.SubjectId, // from every Book take the foreign key
subject => subject.Id, // from every Subject take the primary key
// when they match, take the Book and the Subject to make one new object:
(book, subject) => new
{
Id = book.Id,
Title = book.Title,
...
Subject = new
{
Name = book.Subject.Name,
Description = book.Subject.Description,
...
},
});