我有一个产品模型,允许用户为其产品定义自己的自定义字段。这是通过有 3 个表/模型来完成的。Product
包含模型的 IEnumerable 枚举的模型CustomProductProperty
。每个CustomProductPropertyModel
都是模型的外键DataType
。该DataType
模型是用户定义可用字段的地方。
我遇到的问题是,每次用户创建新产品时,都会创建一组新产品DataType
。如何处理数据以使 TheCustomProductProperty
指向现有的DataType
而不是创建新的?
[Table("Product")]
public class Product
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProductID { get; set; }
public int ProductTypeID { get; set; }
[Display(Name = "Product Name")]
public string ProductName { get; set; }
[ForeignKey("ProductTypeID")]
[Display(Name = "Product Type")]
public virtual ProductType ProductType { get; set; }
public virtual ICollection<CustomProductProperty> CustomProperties { get; set; }
}
[Table("CustomProductProperty")]
public class CustomProductProperty
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CustomPropertyID { get; set; }
public int CustomDataTypeID { get; set; }
[ForeignKey("CustomDataTypeID")]
public CustomDataType DataType { get; set; }
public int ProductID { get; set; }
[ForeignKey("ProductID")]
public virtual Product Product { get; set; }
public string PropertyValue { get; set; }
}
[Table("CustomDataType")]
public class CustomDataType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CustomTypeID { get; set; }
public string PropertyName { get; set; }
public CustomDataTypes DataType { get; set; }
public int ModuleID { get; set; }
[ForeignKey("ModuleID")]
public Module Module { get; set; }
}
在创建表单中,我包含了一个@Html.HiddenFor()
forDataType.CustomTypeID
和调试时,它被包含,但是当我添加到我的 dbcontext 时,它会创建一个全新的DataType
if (ModelState.IsValid)
{
db.Products.Add(productViewModel.Product);
db.SaveChanges();
return RedirectToAction("Index");
}
编辑:创建产品的形式如下。
<table class="basic_info_tbl">
<tr>
<th>@Html.LabelFor(model => model.Product.ProductName):</th>
<td>@Html.TextBoxFor(model => model.Product.ProductName) </td>
<th>@Html.LabelFor(model => model.Product.ProductType):</th>
<td>@Html.DropDownListFor(model => model.Product.ProductTypeID, Model.ProductTypes)</td>
@Html.EditorFor(model => model.Product.CustomProperties)
</tr>
</table>
使用编辑器模板:
<tr>
@Html.HiddenFor(model => model.DataType.CustomTypeID)
<th>@Model.DataType.PropertyName</th>
<td>@Html.TextBoxFor(model => model.PropertyValue)</td>
</tr>