ich arbeite auf einer Entity Framework-Code Erstes Projekt, wo ich viele-zu-viele Beziehungen haben: Serviceprovider und ServicetypeInsert schlägt fehl, in Many-to-Many Beziehung
ich die folgende Fehlermeldung erhalten, wenn eine neue Serviceprovider-Zugabe in das Repository: Der Wert NULL kann nicht in Spalte 'ID' eingefügt werden, Tabelle 'ABCDE.dbo.ServiceTypes'; Spalte erlaubt keine Nullen. INSERT schlägt fehl.
die Entität und Controller-Klassen sind wie folgt:
ServiceProvider.cs:
public partial class ServiceProvider
{
public ServiceProvider()
{
ServiceTypes = new HashSet<ServiceType>();
}
[Key]
public int ServiceProviderID { get; set; }
[Required]
[StringLength(100)]
public string Title { get; set; }
public virtual ICollection<ServiceType> ServiceTypes { get; set; }
public virtual IEnumerable<Service> Services { get; set; }
}
ServiceType.cs:
public partial class ServiceType
{
public ServiceType(ServiceTypeEnum @enum)
{
ID = (int) @enum;
Name = @enum.ToString();
}
protected ServiceType() { } // For EF
//[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
[Required, MaxLength(100)]
public string Name { get; set; }
public virtual ICollection<ServiceProvider> ServiceProviders { get; set; }
public static implicit operator ServiceType(ServiceTypeEnum @enum) => new ServiceType(@enum);
public static implicit operator ServiceTypeEnum(ServiceType serviceType) => (ServiceTypeEnum) serviceType.ID;
}
public enum ServiceTypeEnum
{
Ambulance = 1,
[Display(Name = "Cash Advance")]
CashAdvance = 2,
Hospitalization = 3,
Hotel = 4,
[Display(Name = "House Call")]
HouseCall = 5,
[Display(Name = "Medical Escort")]
MedicalEscort = 6,
Transfer = 7,
Repatriation = 8
}
und die ServiceProviderController.cs:
public ActionResult Create()
{
var _allServiceTypes = Enum.GetValues(typeof(ServiceTypeEnum))
.Cast<ServiceTypeEnum>()
.Select(t => new KeyValuePair<string, int>(t.ToString(), (int) t));
var viewModel = new ServiceProviderViewModel.CreateModel()
{
AllServiceTypes = _allServiceTypes
};
return View(viewModel);
}
[HttpPost]
public ActionResult Create(ServiceProviderViewModel.CreateModel viewModel)
{
if (ModelState.IsValid)
{
var serviceProvider = new ServiceProvider();
serviceProvider.Title = viewModel.Title;
repository.InsertServiceProvider(serviceProvider);
for (int i = 0; i < viewModel.SelectedServiceTypes.Length; i++)
{
var _serviceType = new ServiceType((ServiceTypeEnum)Enum.Parse(typeof(ServiceTypeEnum), viewModel.SelectedServiceTypes[i].ToString()));
serviceProvider.ServiceTypes.Add(_serviceType);
}
repository.Save();
return RedirectToAction("Index");
}
return View(viewModel);
}
Ich bin nicht sicher, warum die Datenbanktabelle ServiceTypeServiceProviders (automatisch von EF erzeugt) nicht mit den korrekten Daten gefüllt. Nichts wird darin gespeichert. Mit Blick auf dem serviceprovider-Objekt beim Debuggen, kann ich sehen, dass alles in Ordnung zu sein scheint (siehe Bild unten)
ich die Servicetype Tabelle manuell mit den folgenden Daten gefüllt (passend zum Enum)
Was ist 'ServiceProvider' und' ServiceType', Sind sie gespeichert? –
Nein, sie werden nicht gespeichert ... – burakk
Gibt es einen Aufruf von 'SaveChanges'? Oder sehen Sie vielleicht die falsche Datenbank? –