我的EntityFramework有点问题。 我的设置如下: 我正在使用Code-First Migrations,这是数据库结构:
using Microsoft.Azure.Mobile.Server;
namespace myProject.DataObjects
{
public class ListRelations : EntityData
{
public string userID { get; set; }
public bool read { get; set; }
public bool write { get; set; }
}
}
现在从EnitityData开始,应该添加ID字段和所有元数据,对吧? 当我尝试像这样填充数据库时:
var relations = new ListRelations();
relations.userID = currentUser;
relations.read = true;
relations.write = true;
relations.listID = current.Id;
context.ListRelationsSet.Add(relations);
try {
context.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
}
}
}
我收到错误,说需要填充ID字段。 但是,数据库不应该为我做这个吗? 我有一点困惑, 欢迎任何帮助!
答案 0 :(得分:1)
使用
public class ListRelations : EntityData
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity),
Column(TypeName = "varchar"),
MaxLength(20),
Key]
public string userID { get; set; }
public bool read { get; set; }
public bool write { get; set; }
}
这取决于您的数据库提供程序,但是例如T-Sql有一个名为newsequentialid()
的过程来帮助填充这些列。
迁移中的样本使用可能是
Id = c.Guid(nullable: false, identity: true, defaultValueSql: "newsequentialid()"),