2012-07-24 5 views
0

J'ai le code suivant pour insérer des données dans la table GiftCouponPayment et la table Payment. Ce code a créé avec succès une base de données et ces deux tables. Cependant, aucune donnée n'est insérée dans une table - Table GiftCouponPayment. Que faut-il changer pour le faire fonctionner?Les données ne sont pas insérées: Code EF Premier

enter image description here

CODE

static void Main(string[] args) 
{ 

     string connectionstring = "Data Source=.;Initial Catalog=NerdDinners;Integrated Security=True;Connect Timeout=30"; 

     using (var db = new NerdDinners(connectionstring)) 
     { 
      var giftCouponPayment = new GiftCouponPayment(); 
      giftCouponPayment.MyID=1; 
      giftCouponPayment.MyValue=250; 


      List<IPaymentComponent> comps = new List<IPaymentComponent>(); 
      comps.Add(giftCouponPayment); 
      var payment = new Payment { PaymentComponents = comps, PaymentID = 1, PayedTime=DateTime.Now }; 
      db.Payments.Add(payment); 

      int recordsAffected = db.SaveChanges(); 


     } 

} 

Classes de domaine

namespace LijosEF 
{ 

public interface IPaymentComponent 
{ 
    int MyID { get; set; } 
    int MyValue { get; set; } 
    int GetEffectiveValue(); 
} 


public partial class GiftCouponPayment : IPaymentComponent 
{ 

    private int CouponValue; 
    public int MyID 
    { 
     get 
     { 
      return this.GiftCouponPaymentID; 
     } 
     set 
     { 
      this.GiftCouponPaymentID = value; 
     } 
    } 

    public int MyValue 
    { 
     get 
     { 
      return this.CouponValue; 
     } 
     set 
     { 
      this.CouponValue = value; 
     } 
    } 

    public int GetEffectiveValue() 
    { 
     if (this.GiftCouponPaymentID < 2000) 
     { 
      return 0; 
     } 
     return this.CouponValue; 
    } 

    public int GiftCouponPaymentID { get; set; } 

} 

public partial class Payment 
{ 
    public int PaymentID { get; set; } 
    public List<IPaymentComponent> PaymentComponents { get; set; } 
    public DateTime PayedTime { get; set; } 

} 



//System.Data.Entity.DbContext is from EntityFramework.dll 
public class NerdDinners : System.Data.Entity.DbContext 
{ 

    public NerdDinners(string connString): base(connString) 
    { 

    } 

    protected override void OnModelCreating(DbModelBuilder modelbuilder) 
    { 
     modelbuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 


    public DbSet<GiftCouponPayment> GiftCouponPayments { get; set; } 
    public DbSet<Payment> Payments { get; set; } 

} 
} 

Répondre

1

Vous ne pouvez pas utiliser l'interface dans votre propriété de navigation - EF ne le supporte pas. Vous devez déclarer votre paiement directement avec une classe:

public partial class Payment { 
    public int PaymentID { get; set; } 
    public List<GiftPaymentComponent> PaymentComponents { get; set; } 
    public DateTime PayedTime { get; set; } 
} 

Si votre paiement peut avoir différentes PaymentComponents vous devez utiliser l'héritage mappée avec la classe de base abstraite au lieu d'interface.

Questions connexes