.Net MVC中EF的代码优先和数据库优先的选择
最近想使用.net的MVC框架做东西,但用到EF的时候发现虽然EF很强大,刚开始用代码优先模式,发现有些问题没有一个现成的解决方案,于是换了数据库优先模式,又发现了一些新...
最近想使用.net的MVC框架做东西,但用到EF的时候发现虽然EF很强大,刚开始用代码优先模式,发现有些问题没有一个现成的解决方案,于是换了数据库优先模式,又发现了一些新的问题,问题如下(当然,有可能是框架中已经有了而我学艺不精不了解):
代码优先模式:
如何设置字段的默认值,如何建立索引(非主键、外键,指的是查询索引、唯一索引等),而且现成的验证也不支持数据库唯一验证。
数据库优先模式:
自动生成的模型根本不能添加各种验证(如[Required]),就算手动添进去,数据库改变时一更新模型,你写的那些东西全没了。
请问如何才能把两者的功能综合起来? 展开
代码优先模式:
如何设置字段的默认值,如何建立索引(非主键、外键,指的是查询索引、唯一索引等),而且现成的验证也不支持数据库唯一验证。
数据库优先模式:
自动生成的模型根本不能添加各种验证(如[Required]),就算手动添进去,数据库改变时一更新模型,你写的那些东西全没了。
请问如何才能把两者的功能综合起来? 展开
若以下回答无法解决问题,邀请你更新回答
2个回答
展开全部
这是一个取舍问题,看你更看重那一块。在某些领域,并不建议在数据库的层次上做约束限制,因为数据库的约束相当耗性能。
追问
做索引不就是为了提升性能么
追答
在EF中是可以做索引的
示例如下:
namespace MigrationsCodeDemo.Migrations
{
using System.Data.Entity.Migrations;
public partial class AddPostClass : DbMigration
{
public override void Up()
{
CreateTable(
"Posts",
c => new
{
PostId = c.Int(nullable: false, identity: true),
Title = c.String(maxLength: 200),
Content = c.String(),
BlogId = c.Int(nullable: false),
})
.PrimaryKey(t => t.PostId)
.ForeignKey("Blogs", t => t.BlogId, cascadeDelete: true)
.Index(t => t.BlogId)
.Index(p => p.Title, unique: true);
AddColumn("Blogs", "Rating", c => c.Int(nullable: false, defaultValue: 3));
}
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
EF 有个功能是数据库迁移,应该能帮到你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询