Table 特性可以应用于一个领域类上面, 用来在数据库中生成相应名称的数据表. 它重写了 EF 6 和 EF Code 中默认的约定, 根据默认约定, EF 6 和 EF Core 创建的表的名称是实体名称 + s(或者 es), 并且创建的数据表的列名称和实体属性名称一样.
Table Attribute: [Table(string name, Properties:[Schema = string])
name: 数据表的名称
Schema: 数据库的模式名称 [可选的]
在上面的例子中, Table 特性应用于 Student 实体上. 所以, EF 将会重写默认的约定, 并且创建名称为 StudentMaster 的数据表, 而不是名称为 Students 的数据表, 例如:
使用 Schema 属性来指定数据表的模式名称:
EF 将会创建 StudentMaster 表, 并且指定表的模式名为 Admin:
好了, 理论介绍完了, 我们动手实践一下:
1. 创建一个控制台应用程序, 名称为: EFAnnotationTable
2. 安装 EF:[install-package entityframework -version 6.2.0]
3. 创建一个 Student 类:
- public class Student
- {
- public int StudentID { get; set; }
- public string Name { get; set; }
- public int Age { get; set; }
- public string Email { get; set; }
- }
4. 创建一个上下文类 EFDbContext:[base 中的 name = 后面名称要和 SQL 连接字符串名称一样.]
- public class EFDbContext:DbContext
- {
- public EFDbContext() : base("name=Constr")
- {
- }
- public DbSet<Student> StudentTable { get; set; }
- }
5. 配置文件中配置连接字符串:
- <connectionStrings>
- <add name="Constr" connectionString="Server=.;Database=EFAnnotationTableDB;uid=sa;pwd=Password_1" providerName="System.Data.SqlClient"/>
- </connectionStrings>
6. 测试程序:
- class Program
- {
- static void Main(string[] args)
- {
- using (var db = new EFDbContext())
- {
- List<Student> lstStuModel= db.StudentTable.ToList();
- }
- Console.WriteLine("success");
- Console.ReadKey();
- }
- }
运行程序:[出现 success 字样, 说明已经生成数据库和数据表成功了!]
我们看一下数据库:
这就是 EF 默认为我们生成的数据表, 可以看到, 表名称默认是实体名称 + s 后缀.
现在我们使用数据注解: 修改一下 Student 实体:
运行之前, 我们需要先手动删除一下刚才生成的数据库和数据表. 因为这里我没有启用数据库迁移技术.
可以看到生成的表名是: StudentInfo 了. 现在我们使用数据注解, 指定一下表的模式名称:
算了, 我还是修改一下代码: 免得每次测试都要手动删除数据库.[PS: 这里直接运行就会报下图错误:]
我们改一下: 上下文类的代码,
然后运行:
成功了, 我们看下数据库:
看到了么, 模式名, 变成了我们设定的 My. 好了, 这一篇数据注解之 Table, 就介绍完了, 大家有不明白的可以留言, 我会一一回复, 谢谢支持!
来源: https://www.cnblogs.com/caofangsheng/p/10651529.html