首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架6实体建模

实体框架6实体建模
EN

Stack Overflow用户
提问于 2018-05-14 21:22:26
回答 1查看 44关注 0票数 0

我有一个名为Batch的表,它有一个类似如下的方案:

代码语言:javascript
复制
BatchId | Created Date | CreatedBy | EngineTypeId
----------------------------------------------------
1       | 2018-05-11   | dbo       |  1

EngineTypeId被绑定到另一个名为BatchEngineSubType的表,其模式如下:

代码语言:javascript
复制
BatchEngineSubTypeId | EngineSubType | Description
---------------------|---------------|------------
1                    | TestEngine    | Dummy text

通常,我能够通过使用标准MVC的网页访问我的表中的数据。然而,我对上面的问题是,我需要我在屏幕上的最终输出如下所示:

代码语言:javascript
复制
 BatchId | Created Date | CreatedBy | EngineSubType
 ----------------------------------------------------
 1       | 2018-05-11   | dbo       |  TestEngine

首先,我创建了一个视图,该视图从我的Batch表中拉出并连接到BatchEngineSubType表上,以获得我想要的展望。但是通过这种方式,我无法允许用户实际修改数据和更新相应的表。

我做了一些谷歌搜索,找到了一个关于fluent api的教程,这样我就可以用C#而不是SQL来做我需要做的所有事情。

按照本教程的要求,我创建了一个名为BatchEngine的新模型,它具有以下特性:

代码语言:javascript
复制
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可以使用它:

代码语言:javascript
复制
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方法中,我尝试将两者绑定在一起,如下所示:

代码语言:javascript
复制
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的部分中看到的那样,括号中的部分尚未完成。这是因为当我输入.时,什么也没有显示。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-05-14 22:06:07

在使用Code First时,如果您在定义类时没有遵循约定,或者您希望更改约定的工作方式,则可以使用fluent API或数据注释来配置您的类,以便Code First可以映射表之间的关系。

'HasMany‘是fluent API中定义实体间关系的方法之一。只有导航属性可以与其一起使用来定义这些实体之间的关系,即一对一、一对多等。在教程中,您遵循的是显示课程和教师之间的关系。

在这里,您尝试使用"Description“字符串属性和"HasMany”方法,该方法需要一个导航属性。你可以在Entity Framework Fluent API - Relationships上找到更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50331393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档