0

ユーザーが製品用に独自のカスタム フィールドを定義できるようにする製品モデルがあります。これは、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>
4

1 に答える 1