J'ai une entité de produit qui a une relation de clé étrangère avec le fabricant. Je veux rendre facultatif si l'utilisateur ajoutant un nouveau produit veut établir un fabricant.Modelbinder crée une relation étrangère inutile .. comment résoudre?
Dans mes create view je,
<%= Html.LabelFor(p => p.Manufacturer.Name) %>
<%= Html.EditorFor(p => p.Manufacturer.Name) %>
En action create,
public ActionResult Create(Product product) {
if (product.Manufacturer != null &&
!String.IsNullOrEmpty(produnt.Manufacturer.Name) &&
!String.IsNullOrWhiteSpace(produnt.Manufacturer.Name)) {
Manufacturer manufacturer = _session.Single<Manufacturer>(m => m.Name.Equals(produnt.Manufacturer.Name));
if (manufacturer == null) {
_session.Add(product.Manufacturer);
}
product.Manufacturer = manufacturer;
}
_session.Add(product);
}
Dans le tableau des fabricants que j'ai simplement des colonnes d'identité et le nom. Le nom est défini sur NOT NULL. Chaque produit a ManufacturerID, qui peut être NULL. J'ai ajouté la relation FK de Manufacturer.ID < => Product.ManufacturerID.
J'ai également défini la valeur par défaut de Product.ManufacturerID sur null en utilisant l'annotation de données DefaultValue avec les métadonnées du modèle.
Cela fonctionne très bien lorsque je spécifie un fabricant lors de la création d'un produit. Mais lorsque je le laisse vide, un ID est affecté à Product.ManufacturerID dans la base de données, mais aucun fabricant n'est créé avec cet ID. Débogueur a montré que Product.Manufacturer.Name est null, mais pour une raison quelconque, Product.Manufacturer.ID et Product.ManufacturerID sont définis sur 0 (pas null). Comment puis-je faire en sorte qu'il quitte null Product.ManufacturerID lorsque aucun fabricant n'est spécifié?
Serait-il une meilleure idée de détacher l'entité du fabricant et ont l'apparence d'action comme celui-ci,
public ActionResult Create(Product product, Manufacturer manufacturer) {
// ...
}
Je suppose que trop compter sur le modèle de liaison n'est pas une bonne idée.