首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在EF CF中设置POCO的默认值?

如何在EF CF中设置POCO的默认值?
EN

Stack Overflow用户
提问于 2010-06-29 11:51:03
回答 6查看 40.2K关注 0票数 46

在实体框架代码优先方法中,如何为POCO的EntityConfiguration类中的属性设置默认值?

代码语言:javascript
复制
public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedOn { get; set; }
}

public class PersonConfiguration : EntityConfiguration<Person>
{
    public PersonConfiguration()
    {
        Property(p => p.Id).IsIdentity();
        Property(p => p.Name).HasMaxLength(100);

        //set default value for CreatedOn ?
    }
}
EN

回答 6

Stack Overflow用户

发布于 2012-02-24 22:58:59

随着Entity Framework4.3的发布,您可以通过迁移来实现这一点。

EF 4.3 Code First Migrations Walkthrough

因此,使用您的示例,它将类似于:

代码语言:javascript
复制
public partial class AddPersonClass : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "People",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Name = c.String(maxLength: 100),
                    CreatedOn = c.DateTime(nullable: false, defaultValue: DateTime.UtcNow)
                })
            .PrimaryKey(t => t.Id);
    }

    public overide void Down()
    {
        // Commands for when Migration is brought down
    }
}
票数 24
EN

Stack Overflow用户

发布于 2011-06-01 20:58:15

您可以通过类的构造函数设置默认值。这是我当前项目中的一个类,使用MVC3和实体框架4.1:

代码语言:javascript
复制
namespace MyProj.Models
{
using System;
using System.Collections.Generic;

public partial class Task
{
    public Task()
    {
        this.HoursEstimated = 0;
        this.HoursUsed = 0;
        this.Status = "To Start";
    }

    public int ID { get; set; }
    public string Description { get; set; }
    public int AssignedUserID { get; set; }
    public int JobID { get; set; }
    public Nullable<decimal> HoursEstimated { get; set; }
    public Nullable<decimal> HoursUsed { get; set; }
    public Nullable<System.DateTime> DateStart { get; set; }
    public Nullable<System.DateTime> DateDue { get; set; }
    public string Status { get; set; }

    public virtual Job Job { get; set; }
    public virtual User AssignedUser { get; set; }
}
}
票数 15
EN

Stack Overflow用户

发布于 2012-05-31 04:20:03

我知道这个话题已经持续了一段时间了,我也遇到了同样的问题。到目前为止,我还找不到一种解决方案,可以将所有的东西放在一个地方,这样代码仍然是可读的。

在创建用户时,我希望对象本身通过private setters设置一些字段,例如GUID和创建日期,而不是‘污染’构造函数。

我的User类:

代码语言:javascript
复制
public class User
{
    public static User Create(Action<User> init)
    {
        var user = new User();
        user.Guid = Guid.NewGuid();
        user.Since = DateTime.Now;
        init(user);
        return user;
    }

    public int UserID { get; set; }

    public virtual ICollection<Role> Roles { get; set; }
    public virtual ICollection<Widget> Widgets { get; set; }

    [StringLength(50), Required]
    public string Name { get; set; }
    [EmailAddress, Required]
    public string Email { get; set; }
    [StringLength(255), Required]
    public string Password { get; set; }
    [StringLength(16), Required]
    public string Salt { get; set; }

    public DateTime Since { get; private set; }
    public Guid Guid { get; private set; }
}

调用代码:

代码语言:javascript
复制
context.Users.Add(User.Create(c=>
{
    c.Name = "Name";
    c.Email = "some@one.com";
    c.Salt = salt;
    c.Password = "mypass";
    c.Roles = new List<Role> { adminRole, userRole };
}));
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3137738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档