简而言之,在POSTing包装器模型期间抛出异常并将一个条目的状态更改为"已修改".在更改状态之前,状态设置为'Detached'但调用Attach()会产生相同的错误.我正在使用EF6.
请在下面找到我的代码(模型名称已更改,以便于阅读)
模型
// Wrapper classes
public class AViewModel
{
public A a { get; set; }
public List<B> b { get; set; }
public C c { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
调节器
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
if (!canUserAccessA(id.Value))
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
var aViewModel = new AViewModel();
aViewModel.A = db.As.Find(id);
if (aViewModel.Receipt == null)
{
return HttpNotFound();
}
aViewModel.b = db.Bs.Where(x => x.aID == id.Value).ToList();
aViewModel.Vendor = db.Cs.Where(x => x.cID …Run Code Online (Sandbox Code Playgroud) 每次我开始研究一个新项目时,我都会和自己进行一场心理辩论,而我正在设计我的POCO.我看过很多教程/代码示例似乎都支持外键关联:
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
Run Code Online (Sandbox Code Playgroud)
与独立协会相反:
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
Run Code Online (Sandbox Code Playgroud)
我以前使用过NHibernate,并且使用了独立的关联,它们不仅感觉更多OO,而且(延迟加载)的优势在于可以让我访问整个Customer对象,而不仅仅是ID.例如,这允许我检索Order实例,然后Order.Customer.FirstName无需显式地进行连接,这非常方便.
所以回顾一下,我的问题是:
另一个表包含具有众所周知 ID 的参考数据。用例是从文件中读取数据,创建实体,然后批量插入它们。我不需要先查询任何内容,因此所有实体都与上下文“断开连接”。
简单的例子:
public class Post
{
public int ID { get; set; }
public string Text { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public int ID { get; set; }
[Required]
public string Label { get; set;}
public virtual ICollection<Post> Posts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
第一次尝试
List<Post> posts = new List<Post>();
loop
var post = new Post { Text = "some text"});
post.Tags.Add(new Tag {ID = 1}); …Run Code Online (Sandbox Code Playgroud) 我使用EF代码优先,我有这样的模型:
public class Product
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public Customer Customer { get; set; }
}
public class Customer
{
public Customer ()
{
Products = new List<Product>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
// more stuff snipped...
public ICollection<Product> Products{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我收到了客户ID以及产品ID列表.当产品在DB中不存在时,我想添加它:
var newProduct = new Product{ Id = id, Name = "<no name yet>", Customer = customer }; …Run Code Online (Sandbox Code Playgroud)