ユーザーが製品用に独自のカスタム フィールドを定義できるようにする製品モデルがあります。これは、3 つのテーブル/モデルを使用することで実現されます。モデルのProductIEnumerable 列挙を含むCustomProductPropertyモデル。それぞれのモデルCustomProductPropertyModelへの外部キーです。DataTypeこのDataTypeモデルは、ユーザーが使用可能なフィールドを定義する場所です。
私が抱えている問題は、ユーザーが新しい製品を作成するたびに、新しいセットDataTypeが作成されることです。CustomProductPropertyTheが既存のものを指し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()forを含め、DataType.CustomTypeIDデバッグするときは含まれていますが、dbcontext に追加すると、まったく新しいDataType
if (ModelState.IsValid)
{
db.Products.Add(productViewModel.Product);
db.SaveChanges();
return RedirectToAction("Index");
}
EDIT:製品を作成するためのフォームは次のとおりです。
<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>