2016-01-27 1 views
0

Ceci est mon premier projet avec Entity Framework et je souhaite ignorer certaines colonnes de données dans mes activités d'insertion, de mise à jour. Mais j'ai encore besoin de les lier quand j'affiche les données sur ma vue.EntityFramework Exclure certains champs de la mise à jour et de l'insertion

Dans l'image ci-dessous, vous pouvez voir des codes dans mon modèle et la structure du tableau

enter image description here

Dans SQL Server, DateCreated, je mis la valeur par défaut de celui-ci à « GETDATE() » et il devrait être ignoré dans l'instruction Insert and Update.

De même, UserCreated et DateCreated doivent également être exclus de l'opération de mise à jour.

Mais quand j'ai essayé d'attraper les scripts SQL envoyées au serveur, ces valeurs sont incluses dans les SQLs Generated et ça me provoque erreur comme dépassement DateTime, la valeur Null pas acceptée, etc ..

Generated SQL Script SQL dans Profiler

exec sp_executesql N'INSERT [dbo].[Events]([Title], [Detail], [StartDate], [StartTime], [EndTime], [CategoryID], [Campus], [Location], [DateCreated], [UserCreated], [DateModified], [UserModified], [state], [IsPosted]) 
     VALUES (@0, @1, @2, @3, @4, @5, @6, NULL, @7, @8, NULL, NULL, @9, @10) 
SELECT [EventID] 
       FROM [dbo].[Events] WHERE @@ROWCOUNT > 0 AND [EventID] = scope_identity()', 
     N'@0 varchar(1000),@1 varchar(4000),@2 datetime2(7),@3 time(7),@4 time(7),@5 varchar(10),@6 varchar(100),@7 datetime2(7),@8 varchar(50),@9 tinyint,@10 bit',@0='Football', 
    @1='Welcome to <strong>Football </strong>Match',@2='2016-01-29 00:00:00',@3='07:00:00',@4='12:00:00',@5='GIG',@6='xxxx',@7='0001-01-01 00:00:00',@8='username',@9=0,@10=0 

Répondre

1

Insérer

Utilisez [DatabaseGenerated (DatabaseGeneratedOption.Computed)] de annota de données tion sur la colonne DateCreated pour utiliser la valeur par défaut générée par la base de données.

https://msdn.microsoft.com/en-us/data/jj591583.aspx#DatabaseGenerated

Mise à jour

Entity Framework champ modifié mise à jour uniquement, si simplement ne change pas la valeur de UserCreated et il ne sera pas mis à jour.

2

lors de l'insertion ou la mise à jour il suffit de laisser les champs que vous ne voulez pas être mis à jour ou inséré comme suit

[HttpPost] 
public ActionResult Index(TimeSpan StartTime, TimeSpan EndTime, string CategoryID, string Campus, string Location, DateTime DateModified, string UserModified, 
byte State, bool IsPosted) 
    { 

    var yourDbContext = new yourDbContext(); 
    Events events = new Events(); 
    events.StartTime=StartTime; 
    events.EndTime=EndTime; 
    events.CategoryID=CategoryID; 
    events.Campus=Campus; 
    events.Location =Location; 
    events.DateModified=DateModified; 
    events.UserModified=UserModified; 
    events.State= State; 
    events.IsPosted= IsPosted;  

    //Inserting 
     try 
     { 
      yourDbContext.Events.Add(events); 
      yourDbContext.SaveChanges(); 

      return Json("Inserted", JsonRequestBehavior.AllowGet); 
     } 
    catch (Exception e) 
     { 

      return Json(e.ToString(), JsonRequestBehavior.AllowGet); 
     } 

    //end of inserting 


    //Updating 
    try 
     { 
      yourDbContext.Entry(events).State = EntityState.Modified; 
      yourDbContext.SaveChanges(); 
       return Json("Updated", JsonRequestBehavior.AllowGet); 
     } 
    catch (Exception e) 
     { 
      return Json(e.ToString(), JsonRequestBehavior.AllowGet); 
     } 

    //End of updating 

    } 

Lorsque vous affichez vos données sur votre point de vue, juste générer une vue fortement typé en fonction de vos événements modèle

0

Ceci pourrait également être réalisé dans le contrôleur.

Créer

Dans la méthode create vous pouvez définir la valeur de CreatedBy et CreatedOn.

CreatedOn = DateTime.Now; 
CreatedBy = User.Identity.Name; //In case of Windows authentication else user name can be taken from the db 
ModifiedOn = null; 
ModifiedBy = null; 

Mise à jour

En mise à jour, vous pouvez définir à nouveau la valeur de ModifiedBy et ModifiedOn comme ci-dessus et de retenir CreatedBy et CreatedOn les éléments suivants pourraient être ajoutés

events.ModifiedOn = DateTime.now; 
events.ModifiedBy = User.Identity.Name; 
db.Entry(events).State = EntityState.Modified; 
db.Entry(events).Property("CreatedOn").IsModified = false; 
db.Entry(events).Property("CreatedBy").IsModified = false;