2017-09-26 61 views
-1

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

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

有没有办法使用动态模式呢?

+4

以及EF应如何使用此创建表? – adiga

回答

1

这是一个XY problem

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

这就是人们通常最终得到的文档数据库和抑郁症。

相反,您需要阅读一些有关数据库规范化的东西。你在学生和课程或考试之间有一对关系,或者这些数字意味着代表什么。

所以模型:

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

,并使用“动态模式”的需要就会消失。