博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于EF Code First模式不同建模方式对建表产生的影响
阅读量:5819 次
发布时间:2019-06-18

本文共 2657 字,大约阅读时间需要 8 分钟。

今天在学EF Code First模式的时候,发现几个很有趣的问题,问题如下:

1、当编写玩实体后,不指定任何主键约束,EF会找长的最像Id的,然后设置其为主键,验证代码如下:

//User类    class User    {        public Guid UserId { get; set; }        public string Name { get; set; }    }
class CodeFirstContext:DbContext    {        public DbSet
Users { get; set; } public CodeFirstContext() : base("name=CodeFirstDemo"){} protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }
static void Main(string[] args)        {            using (var context = new CodeFirstContext())            {                foreach (var item in context.Users)                {                    Console.WriteLine(item.Name);                }                Console.ReadKey();            }        }

运行控制台,看看数据库会有什么表现?

结论:发现EF在我没有指定那个是主键的情况下,将UserId设为了主键

 

2、当一个实体中有两个带Id的字段,EF会将最像Id的设为主键,优先级  Id>UserId>UserId_Id

class User    {        public Guid Id { get; set; }        public Guid UserId { get; set; }        public string Name { get; set; }    }

其他代码相同,只改User类代码,运行控制台看数据库表现

EF将Id设为了主键,UserId和UserId_Id的优先级自行验证.

 

3、关于外键的问题,当在实体中加入导航属性,EF生成外键可能会当前实体中的其他字段的影响.验证代码如下:

class PhotoInfo    {        public Guid Id { get; set; }        public string PhootoContent { get; set; }        public string IsActive { get; set; }        public User User { get; set; }    }    //User类    class User    {        public Guid Id { get; set; }        public string Name { get; set; }    }
class CodeFirstContext:DbContext    {        public DbSet
Users { get; set; } public DbSet
PhotoInfos { get; set; } public CodeFirstContext() : base("name=CodeFirstDemo"){} protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }
    static void Main(string[] args)        {            using (var context = new CodeFirstContext())            {                foreach (var item in context.Users)                {                    Console.WriteLine(item.Name);                }                foreach (var item in context.PhotoInfos)                {                    Console.WriteLine(item.PhootoContent);                }                Console.ReadKey();            }        }

看看数据库的表现:

EF生成了一个User_Id的外键属性,关联User表

下面修改PhotoInfo实体,代码如下:

class PhotoInfo    {        public Guid Id { get; set; }        public string PhootoContent { get; set; }        public string IsActive { get; set; }        public Guid UserId { get; set; }        public User User { get; set; }    }

EF不再自动生成外键字段,而是将UserId属性设为了外键.

 

以上都是我测试出来的关于EF默认的行为,比较片面,欢迎指正.

转载地址:http://qnwdx.baihongyu.com/

你可能感兴趣的文章
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
poj3692
查看>>
python之信号量【Semaphore】
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
WCF
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
Android实例-录音与回放(播放MP3)(XE8+小米2)
查看>>
CSS——(2)与标准流盒模型
查看>>
MYSQL 基本SQL语句
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>