在实体框架代码优先方法中,如何为POCO的EntityConfiguration类中的属性设置默认值?
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 ?
}
}
发布于 2012-02-24 22:58:59
随着Entity Framework4.3的发布,您可以通过迁移来实现这一点。
EF 4.3 Code First Migrations Walkthrough
因此,使用您的示例,它将类似于:
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
}
}
发布于 2011-06-01 20:58:15
您可以通过类的构造函数设置默认值。这是我当前项目中的一个类,使用MVC3和实体框架4.1:
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; }
}
}
发布于 2012-05-31 04:20:03
我知道这个话题已经持续了一段时间了,我也遇到了同样的问题。到目前为止,我还找不到一种解决方案,可以将所有的东西放在一个地方,这样代码仍然是可读的。
在创建用户时,我希望对象本身通过private setters
设置一些字段,例如GUID和创建日期,而不是‘污染’构造函数。
我的User类:
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; }
}
调用代码:
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 };
}));
https://stackoverflow.com/questions/3137738
复制相似问题