.Net MVC中EF的代码优先和数据库优先的选择

最近想使用.net的MVC框架做东西,但用到EF的时候发现虽然EF很强大,刚开始用代码优先模式,发现有些问题没有一个现成的解决方案,于是换了数据库优先模式,又发现了一些新... 最近想使用.net的MVC框架做东西,但用到EF的时候发现虽然EF很强大,刚开始用代码优先模式,发现有些问题没有一个现成的解决方案,于是换了数据库优先模式,又发现了一些新的问题,问题如下(当然,有可能是框架中已经有了而我学艺不精不了解):

代码优先模式:
如何设置字段的默认值,如何建立索引(非主键、外键,指的是查询索引、唯一索引等),而且现成的验证也不支持数据库唯一验证。

数据库优先模式:
自动生成的模型根本不能添加各种验证(如[Required]),就算手动添进去,数据库改变时一更新模型,你写的那些东西全没了。

请问如何才能把两者的功能综合起来?
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
如是我之闻
推荐于2018-03-23 · TA获得超过1237个赞
知道小有建树答主
回答量:1207
采纳率:57%
帮助的人:822万
展开全部
这是一个取舍问题,看你更看重那一块。在某些领域,并不建议在数据库的层次上做约束限制,因为数据库的约束相当耗性能。
追问
做索引不就是为了提升性能么
追答

在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));
        }
      
    }
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
今年以后_涛
2014-03-04 · 超过16用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:38.5万
展开全部
EF 有个功能是数据库迁移,应该能帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式