映射表关系仅包含从现有数据库到实体框架对象的主键

时间:2012-09-18 08:00:13

标签: c# asp.net-mvc-3 entity-framework

我在旧数据库中有以下表格。

数据 dataid PK, 年, 编号

_1 dataid PK, note_1, 完成

_2 dataid PK, 笔记2, 类型, 对象

data_other dataid PK, note_other, 一个, b, ç

我的模型类看起来像;

public class Data
{
    public int DataID { get; set; }
    public int Year { get; set; }
    public int Number { get; set; }
}

public class Data1
{
    public int DataID { get; set; }
    public int Note1{ get; set; }
    public int Completed { get; set; }
}

public class Data1
{
    public int DataID { get; set; }
    public int Note2 { get; set; }
    public string Type { get; set; }
    public string Object { get; set; }
}

public class DataOther
{
    public int DataID { get; set; }
    public int NoteOther { get; set; }
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
}
    public DbSet<Data> Datas { get; set; }
    public DbSet<Data1> Data1s { get; set; }
    public DbSet<Data2> Data2s { get; set; }
    public DbSet<DataOther> DataOthers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
            modelBuilder.Entity<Data>().ToTable("data");
            modelBuilder.Entity<Data>().HasKey(t => t.DataID);

            modelBuilder.Entity<Data1>().ToTable("data_1");
            modelBuilder.Entity<Data1>().HasKey(t => t.DataID);

            modelBuilder.Entity<Data2>().ToTable("data_2");
            modelBuilder.Entity<Data2>().HasKey(t => t.DataID);

            modelBuilder.Entity<DataOther>().ToTable("data_other");
            modelBuilder.Entity<DataOther>().HasKey(t => t.DataID);
    }

我尝试了不同的教程和博客解决方案,但似乎无法实现,

modelBuilder.Entity<Data>()
    .HasRequired(a => a)
    .WithMany()
    .HasForeignKey(a => a);

我看到的问题是我们只有主键而没有外键。我正在使用MVC3和实体框架5.我想要的只是在视图@ Model.Datas.Others.NoteOther

中仅举例说明

但是关于如何在这些表之间建立关系的任何提示都很棒!

1 个答案:

答案 0 :(得分:0)

听起来你想要几个1:0..1的关系。

要映射它,首先需要映射班级中的实际关系:

public class Data
{
    public int DataID { get; set; }
    public int Year { get; set; }
    public int Number { get; set; }

    public Data1 Data1 { get; set; }
    public Data2 Data2 { get; set; }
    public DataOther DataOther { get; set; }
}

然后,使用流利的方式定义关系:

        modelBuilder.Entity<Data>().HasOptional(d => d.Data1)
            .WithRequired();
        modelBuilder.Entity<Data>().HasOptional(d => d.Data2)
            .WithRequired();
        modelBuilder.Entity<Data>().HasOptional(d => d.DataOther)
            .WithRequired();

这为我制作了这个数据库:

enter image description here