Asp.net mvc MVC实体框架表示该字段为空,但它';不是
我需要创建新对象并将其添加到数据库中。首先,我将唯一ID设置为产品(我的实体)。并返回用户可以在其中设置其他字段的视图Asp.net mvc MVC实体框架表示该字段为空,但它';不是,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我需要创建新对象并将其添加到数据库中。首先,我将唯一ID设置为产品(我的实体)。并返回用户可以在其中设置其他字段的视图 public ViewResult Create() { var product = new Product { ProductID = GetFreeId() }; return View("Edit",product); } 观点: @using (Html.BeginForm()) { @Html
public ViewResult Create()
{
var product = new Product { ProductID = GetFreeId() };
return View("Edit",product);
}
观点:
@using (Html.BeginForm()) {
@Html.EditorForModel()
<input type="submit" value="Save" />}
如果我在最后一个方法中放置断点,我将看到product.ProductID=10
,但是在字符串上下文中。SaveChanges()代码>我得到异常:
无法插入ProductID=null的实体
错误在哪里?当您发回时,可能没有设置ID。您应该在post方法中设置它。当您发回时,可能没有设置ID。您应该在post方法中进行设置。如果您想手动提供密钥,并且密钥不是数据库中自动生成的标识,则必须将此告知实体框架,例如,使用产品中的数据注释模型:
public class Product
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ProductID { get; set; }
//...
}
使用Fluent API,它是:
modelBuilder.Entity<Product>()
.Property(p => p.ProductID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity()
.Property(p=>p.ProductID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
int
键的默认值是EF假设ID是在数据库中生成的,并且EF不会将ID值发送到DB,即使它是在您的模型中设置的。数据库会引发异常,因为它在INSERT语句中没有获取密钥。如果您想手动提供密钥,并且密钥不是数据库中自动生成的标识,则必须将此告知实体框架,例如,对于产品
模型中的数据注释:
public class Product
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ProductID { get; set; }
//...
}
使用Fluent API,它是:
modelBuilder.Entity<Product>()
.Property(p => p.ProductID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity()
.Property(p=>p.ProductID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
int
键的默认值是EF假设ID是在数据库中生成的,并且EF不会将ID值发送到DB,即使它是在您的模型中设置的。数据库会抛出一个异常,因为它在INSERT语句中没有得到一个键。只是想知道您是否会返回AddProduct actionresult?是的。[HttpPost]公共操作结果创建(产品){if(ModelState.IsValid){repository.AddProduct(产品);只是想知道您是否返回到AddProduct操作结果?是。[HttpPost]公共操作结果创建(产品){if(ModelState.IsValid){repository.AddProduct(产品);谢谢!我应该将什么类型设置为ProductID而不是int来避免这个问题?@Stalli:Forstring
和Guid
,我相信,DatabaseGeneratedOption
默认为None
。但是我会将其保留为int
,只需覆盖上面所示的默认值。有覆盖de的选项错误,使用此选项没有错。谢谢!我应该将什么类型设置为ProductID而不是int以避免此问题?@Stalli:Forstring
和Guid
,我相信DatabaseGeneratedOption
默认为None
。但我会将其保留为int
,并将默认值改写为shown。有覆盖默认值的选项,使用此选项没有任何错误。