Je cherchais un moyen de générer automatiquement en ID pour une application ASP.NET MVC. Ceci est parce que je reçois cette erreur en essayant de mettre à jour la base de données:System.Data.SqlClient.SqlException: Impossible d'insérer la valeur NULL dans la colonne 'IngredientId', la table 'RecipeApplicationDb.dbo.IngredientModels';
System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'IngredientId', table 'RecipeApplicationDb.dbo.IngredientModels';
Ceci est le modèle:
public class IngredientModel
{
[Key]
public int IngredientId { get; set; }
[Required]
public string Name { get; set; }
}
C'est le contrôleur:
public class IngredientController : Controller
{
private RecipeApplicationDb db = new RecipeApplicationDb();
public ActionResult Index()
{
//var ingredients = db.Ingredients.Include(i => i.DefaultUOM);
return View();
}
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "IngredientId,Name,SeasonStartdate,SeasonEnddate")] IngredientModel ingredientModel)
{
if (ModelState.IsValid)
{
db.Ingredients.Add(ingredientModel);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.IngredientId = new SelectList(db.UnitOfMeasures, "UnitOfMeasureId", "Name", ingredientModel.IngredientId);
return View(ingredientModel);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
Je pense que la meilleure façon Pour résoudre ce problème, utilisez une expression Linq pour générer IngredientId. Pour cela, j'ai trouvé (entre autres) ce poste: How do I use Linq to obtain a unique list of properties from a list of objects? Quelqu'un pourrait me dire si c'est la bonne solution, et si oui, où je devrais mettre ce code.
Merci d'avance.
============= EDIT =====================
J'ai aussi créé un fichier de configuration avec ce contenu:
#region Ingredienten
var italiaanseHam = new IngredientModel { Name = "Italiaanse Ham", SeasonStartdate = DateTime.Now, SeasonEnddate = DateTime.Now };
var zachteGeitenkaas = new IngredientModel { Name = "Zachte Geitenkaas", SeasonStartdate = DateTime.Now, SeasonEnddate = DateTime.Now };
var gedroogdeVeenbessen = new IngredientModel { Name = "Gedroogde Veenbessen", SeasonStartdate = DateTime.Now, SeasonEnddate = DateTime.Now };
var gemsla = new IngredientModel { Name = "Gemsla", SeasonStartdate = DateTime.Now, SeasonEnddate = DateTime.Now };
var stilton = new IngredientModel { Name = "Stilton", SeasonStartdate = DateTime.Now, SeasonEnddate = DateTime.Now };
if (!context.Ingredients.Any())
{
context.Ingredients.AddOrUpdate(
i => i.IngredientId,
italiaanseHam,
zachteGeitenkaas,
gedroogdeVeenbessen,
gemsla,
stilton
);
};
#region Recipes
var LittleGemsal = new RecipeModel
{
Name = "Little Gemsla",
Description = "Little Gemsla met geitenkaas, veenbessen, gedroogde ham en stilton",
ImageUrl = "http://google.com",
RecipeLines = new List<RecipeLine> {
new RecipeLine { Quantity = 1, UnitOfMeasure = plak, Ingredient = italiaanseHam },
new RecipeLine { Quantity = 100, UnitOfMeasure = gram, Ingredient = zachteGeitenkaas },
new RecipeLine { Quantity = 2, UnitOfMeasure = eetlepel, Ingredient = gedroogdeVeenbessen },
new RecipeLine { Quantity = 4, UnitOfMeasure = stuks, Ingredient = gemsla },
new RecipeLine { Quantity = 1, UnitOfMeasure = stuks, Ingredient = stilton },
}
};
if (!context.Recipes.Any())
{
context.Recipes.AddOrUpdate(
i => i.RecipeId,
LittleGemsal
);
};
#endregion
et mettre à jour la base de données que j'utilise package manager Console avec la commande:
Update-Database -Verbose -Force
J'utilise aussi localdb pour ce projet, faire gestionnaire de base de données ne trouve pas la base de données.
Vous souciez-vous de la valeur? vous pouvez simplement configurer votre base de données pour incrémenter automatiquement l'ID pour vous: http://stackoverflow.com/questions/10991894/auto-increment-primary-key-in-sql-server-management-studio-2012 – user1666620
@ user1666620 Jusqu'à présent En ce qui me concerne, tout ce dont j'ai besoin est un identifiant unique. –
Je voudrais certainement aller avec l'incrément d'identité de SQL Server comme @ user1666620 suggéré. Cela effacerait toute la question. –