我在C#.Net中有一个MVC3项目。我的Object1有一个Object2列表......
//navigation Property(s)
public virtual ICollection<Object2> Object2s { get; set; }
Object2具有Object1属性和Object1_Id属性
public int Object1_Id { get; set; }
public virtual Object1 Object1 { get; set; }
当我运行Object2的索引视图时,我收到消息“无效的列名'Object1_Id1'”。奇怪......它正在寻找一个自动化的专栏。当我从Object2中删除Object1_Id时,它会很好,直到我在Create View中保存。然后它会抛出一条错误消息:
{"Cannot insert the value NULL into column 'Object1_Id', table 'dbo.Object2'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."}
我确信我只是错过了一个简单的步骤。有什么想法吗?
答案 0 :(得分:1)
您想使用流畅的API进行调整。您可以在DB Context类中执行此操作。请查看此链接页面的底部,以查看使用流畅API的示例。
public class ObjectContext : DbContext
{
public DbSet<Object1> Object1s{ get; set; }
public DbSet<Object2> Object2s{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Object2>()
.HasOptional(o => o.Object1).WithRequired(o => o.Object2);
}
}
答案 1 :(得分:1)
我想出了我的问题。当我在我的Object2 Controller上调用Create post动作时,我检索父Object1,为我的新Object2创建一个Guid,将新的Object2添加到Object1.Object2s集合,将Object1状态设置为modified,然后保存db:
var object1ToUpdate = db.Object1s.Where(
aObject1 => aObject1.Id.Equals(myId)
).Include(aObject1 => aObject1.Object2s).Single();
string id = Guid.NewGuid().ToString();
Object2.Id = Guid.NewGuid();
object1ToUpdate.Object2s.Add(Object2);
db.Entry(object1ToUpdate).State = EntityState.Modified;
db.SaveChanges();