C# 基于动态模型的代码优先方法

C# 基于动态模型的代码优先方法,c#,entity-framework,C#,Entity Framework,我们可以使用动态模型实现代码优先的方法吗 private void btnCreate_Click(object sender, EventArgs e) { Model1 context = new Model1(); dynamic expando = new ExpandoObject(); var marksModel = expando as IDictionary<string, object>; string studentName

我们可以使用动态模型实现代码优先的方法吗

private void btnCreate_Click(object sender, EventArgs e)
{
    Model1 context = new Model1();

    dynamic expando = new ExpandoObject();
    var marksModel = expando as IDictionary<string, object>;

    string studentName = "Alice";
    marksModel.Add("rollNo", studentName);
    marksModel.Add("Name", studentName);
    marksModel.Add("Physics", 24);
    marksModel.Add("Chemistry", 45);
    marksModel.Add("Biology", 31);

    context.ExpandoObject.Add(expando);
    context.SaveChanges();
}
private void btn创建\u单击(对象发送方,事件参数e)
{
Model1上下文=新Model1();
动态expando=新的ExpandoObject();
var marksModel=expando作为IDictionary;
string studentName=“Alice”;
添加(“rollNo”,学生姓名);
添加(“姓名”,学生姓名);
marksModel.Add.(“物理学”,第24页);
添加(“化学”,45);
添加(“生物学”,31);
context.ExpandoObject.Add(expando);
SaveChanges();
}
上下文类中

public class Model1 : DbContext
{

    public Model1()
        : base("name=Model1")
    {
    }

   public  DbSet<ExpandoObject> ExpandoObject { get; set; }
}
公共类模型1:DbContext
{
公共模型1()
:base(“name=Model1”)
{
}
公共DbSet ExpandoObject{get;set;}
}
使用动态模型有什么办法吗?

这是一个简单的问题

乍一看,您似乎希望将随机属性附加到实体,并将这些属性存储为列值。因此,您的解决方案是找到一个数据库解决方案,它允许您使用无模式,您向该数据库添加了一包数据,然后在试图找出如何从数据中查询有意义的内容时陷入了地狱

这就是为什么人们通常会同时拥有一个文档数据库和一个抑郁症

相反,您需要阅读一两篇关于数据库规范化的文章。学生和课程或考试之间有一些关系,或者这些数字代表的任何东西

因此,模型:

public class Student
{
    public string Name { get; set; }
    public ICollection<Course> Courses { get; set; }
    public ICollection<Exam> Exams { get; set; }
}

public class Course
{
    public string Name { get; set; }
    public ICollection<Student> Student { get; set; }
    public ICollection<Exam> Exams { get; set; }
}

public class Exam
{
    public Course Course { get; set; }
    public Student Student { get; set; }
    public decimal Grade { get; set; }
}
公共班级学生
{
公共字符串名称{get;set;}
公共ICollection课程{get;set;}
公共ICollection考试{get;set;}
}
公共课
{
公共字符串名称{get;set;}
公共ICollection学生{get;set;}
公共ICollection考试{get;set;}
}
公开课考试
{
公共课程{get;set;}
公立学生学生{get;set;}
公共十进制等级{get;set;}
}

使用“动态模型”的需求消失了。

那么EF应该如何使用它创建一个表呢?