在下面的场景中,Field类有2个属性DataType,它是枚举,Value是对象类型。我应该如何使用Entity Framework为以下类创建SQL表?请详细解释,因为我是MVC的新手。
注意:我能够创建具有任何预定义数据类型的SQL表(首先使用mvc代码)和枚举,但是我不知道如何实现对象类型属性。这里Field表应该容纳大量的列。还有一种方法可以使用Dictionary来实现Value。或者可以使用任何其他ORM来实现。
public class Data
{
public string name {get; set;}
public Field Value {get;set;}
}
public class Field
{
public DataType datatype {get;set;}
public object Value {get; set;}
}
public class Field<T> : Field
{
T Value {get; set;}
}
@Abdulmalek Albakkar,我已经有一个asp.net代码,我正在尝试构建一个db模式。这些属性来自业务逻辑,这就是为什么它们不是非常友好的数据库。 让我尝试用下面的例子来解释,第一个表(Person)就像一个存储人名(字符串)的索引和带有人(类对象)细节的字段。
public class Person
{
public string name {get; set;}
public Field Value {get;set;}
}
第二个表(GetPersonDetail)是一个链接到Person表,它有一个列可以采用任何数据类型及其值
public class GetPersonDetail
{
public object Value {get; set;}
}
对于每个人,应该只有一个表只有一行,并且所有的人员细节都应该从GetPersonDetail表中提取,即;
**Value**
FirstName:Sam
LastName:Wolsh
Age:21
Salary:3000
Weight:55
Hobby:Singing
**Name FirstName LastName Age Salary Weight Hobby**
Sam Sam Wolsh 21 3000 55 Singing
**Value**
NickName:Bob
Height:160
Interest:Travel
**Name NickName Height Interest**
Bobby Bob 168 Travel
此处应允许此人在GetPersonDetail表中输入他们想要提供的任何详细信息,然后在单个列中收集的所有详细信息应自动转换为Person表中的列,如上所述。这种情况可以在MVC中实现吗?
答案 0 :(得分:0)
EF不支持通用类
我想我之前已经知道了 你可能应该创建三个类 我们假设我们正在处理账户...... 我们的课程是账户,详细信息,账户详细信息
Account:ID,Name
Detail: ID,Name , Type(enum)
AccountDetail: ID, AccountID , DetailID , Value [object]
然后,当用户输入不存在的详细信息时,我们先将其添加到详细信息中,然后在该帐户与我们插入的详细信息之间建立关系
Account: 1, John
Detail: 1, Age , Int(enum)[0,1,2...etc]
AccountDetail:1,1,1,24
然后,根据您的类型(枚举),您可以对输入(值)进行验证
当用户输入我们已有的详细信息时,我们只需从我们的数据库中获取其ID并与该帐户建立关系