繁体   English   中英

使用动态模型的代码优先方法

[英]code first approach with dynamic model

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

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();
}

在上下文类中

public class Model1 : DbContext
{

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

   public  DbSet<ExpandoObject> ExpandoObject { get; set; }
}

有什么办法可以使用动态模型吗?

这是一个XY 问题

乍一看,您似乎想要将随机属性附加到实体,并将这些属性存储为列值。 因此,您的解决方案是找到一个数据库解决方案,让您可以无模式,向该数据库添加一袋数据,然后最终陷入困境,试图找出如何从数据中查询有意义的内容。

这就是人们通常以文档数据库和抑郁症结束的方式。

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

所以模型:

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; }
}

并且不再需要使用“动态模型”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM