我有一个名为Batch的表,它有一个类似如下的方案:
BatchId | Created Date | CreatedBy | EngineTypeId
----------------------------------------------------
1 | 2018-05-11 | dbo | 1列EngineTypeId被绑定到另一个名为BatchEngineSubType的表,其模式如下:
BatchEngineSubTypeId | EngineSubType | Description
---------------------|---------------|------------
1 | TestEngine | Dummy text通常,我能够通过使用标准MVC的网页访问我的表中的数据。然而,我对上面的问题是,我需要我在屏幕上的最终输出如下所示:
BatchId | Created Date | CreatedBy | EngineSubType
----------------------------------------------------
1 | 2018-05-11 | dbo | TestEngine首先,我创建了一个视图,该视图从我的Batch表中拉出并连接到BatchEngineSubType表上,以获得我想要的展望。但是通过这种方式,我无法允许用户实际修改数据和更新相应的表。
我做了一些谷歌搜索,找到了一个关于fluent api的教程,这样我就可以用C#而不是SQL来做我需要做的所有事情。
按照本教程的要求,我创建了一个名为BatchEngine的新模型,它具有以下特性:
public class BatchEngine : IObjectWithState
{
[Key]
public int BatchEngineSubTypeId { get; set; }
public string EngineType { get; set; }
public string Desciption { get; set; }
public State State { get; set; }
}在我的Batch模型中,我做了一些更改以使用新模型,以便fluent API可以使用它:
public class Batch_Adjustment : IObjectWithState
{
[Key]
public int BatchId { get; set; }
public DateTime CreatedDate { get; set; }
public string CreatedBy { get; set; }
public int BatchEngineTypeId { get; set; }
[ForeignKey("BatchEngine")]
public string Engine { get; set; }
public virtual BatchEngine BatchEngine { get; set; }
}最后一步,在我的OnModelCreating方法中,我尝试将两者绑定在一起,如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Types<IObjectWithState>().Configure(c => c.Ignore(p => p.State));
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.HasDefaultSchema("dbo");
modelBuilder.Entity<BatchEngine>()
.HasMany(b => b.Desciption).WithMany(i => i.)
.Map(t => t.MapLeftKey()
.MapRightKey()
.ToTable("vwBatchRetention"));
modelBuilder.Entity<Batch>().ToTable("Batch").HasKey(e => e.BatchId);
}在最后一步,我在完成时遇到了问题。我的设置是正确的吗?正如您将在包含.WithMany的部分中看到的那样,括号中的部分尚未完成。这是因为当我输入.时,什么也没有显示。
我做错了什么?
发布于 2018-05-14 22:06:07
在使用Code First时,如果您在定义类时没有遵循约定,或者您希望更改约定的工作方式,则可以使用fluent API或数据注释来配置您的类,以便Code First可以映射表之间的关系。
'HasMany‘是fluent API中定义实体间关系的方法之一。只有导航属性可以与其一起使用来定义这些实体之间的关系,即一对一、一对多等。在教程中,您遵循的是显示课程和教师之间的关系。
在这里,您尝试使用"Description“字符串属性和"HasMany”方法,该方法需要一个导航属性。你可以在Entity Framework Fluent API - Relationships上找到更多信息。
https://stackoverflow.com/questions/50331393
复制相似问题