Я прошел аналогичные вопросы, но это решает мою цель. Im, используя тот же код двумя способами: 1. непосредственно через кнопку нажмите 2. Через запланированные задачи.MVC3 - объект объекта не может ссылаться на несколько экземпляров ientitychangetracker
По методу 1 он работает нормально, но метод 2 дает эту ошибку. Мой код:
Сервис -
public virtual int SendCampaign(Campaign campaign, EmailAccount emailAccount,
IEnumerable<NewsLetterSubscription> subscriptions)
{
var campaignSubscriberTrack = new CampaignNewsletterSubscriberTrack();
if (campaign == null)
throw new ArgumentNullException("campaign");
if (emailAccount == null)
throw new ArgumentNullException("emailAccount");
int totalEmailsSent = 0;
foreach (var subscription in subscriptions)
{
var tokens = new List<Token>();
_messageTokenProvider.AddStoreTokens(tokens);
_messageTokenProvider.AddNewsLetterSubscriptionTokens(tokens, subscription);
string subject = _tokenizer.Replace(campaign.Subject, tokens, false);
string body = _tokenizer.Replace(campaign.Body, tokens, true);
var email = new QueuedEmail()
{
Priority = 3,
From = emailAccount.Email,
FromName = emailAccount.DisplayName,
To = subscription.Email,
Subject = subject,
Body = body,
CreatedOnUtc = DateTime.UtcNow,
EmailAccountId = emailAccount.Id
};
_queuedEmailService.InsertQueuedEmail(email);
totalEmailsSent++;
campaignSubscriberTrack.CampaignId = campaign.Id;
campaignSubscriberTrack.NewsletterSubscriberId = subscription.Id;
campaignSubscriberTrack.Campaign = campaign;
campaignSubscriberTrack.NewsletterSubscription = subscription;
campaignSubscriberTrack.IsEmailOpened = 0;
campaignSubscriberTrack.OpenedOnUtc = null;
Guid guid;
string id = tokens.Where(t => t.Key.Equals("TrackImage")).Select(t => t.Value).FirstOrDefault();
var lastPart = (id.Split('/').Last()).Split('=').Last();
if (lastPart != null)
{
guid = new Guid(lastPart);
campaignSubscriberTrack.ImageGUID = guid;
}
***InsertCampaignNewsletterSubscriberTrack(campaignSubscriberTrack);***
}
campaign.CampaignSchedulingTime = 0;
UpdateCampaign(campaign);
return totalEmailsSent;
}
Класс -
public partial class CampaignNewsletterSubscriberTrack
{
public virtual Campaign Campaign { get; set; }
public virtual int CampaignId { get; set; }
public virtual NewsLetterSubscription NewsletterSubscription { get; set; }
public virtual int NewsletterSubscriberId { get; set; }
public virtual int IsEmailOpened { get; set; }
public virtual DateTime? OpenedOnUtc { get; set; }
public virtual Guid ImageGUID { get; set; }
}
}
Модель -
public class CampaignNewsletterSubscriberTrackModel
{
public int CampaignId { get; set; }
public int NewsletterSubscriberId { get; set; }
public int IsEmailOpened { get; set; }
public DateTime? OpenedOnUtc { get; set; }
public Guid ImageGUID { get; set; }
}
И в этой функции запись получает вставленной -
public virtual void InsertCampaignNewsletterSubscriberTrack(CampaignNewsletterSubscriberTrack track)
{
if (track == null)
throw new ArgumentNullException("track");
_campaignNewsletterSubscriberTrackRepository.Insert(track);
}
Ошибка возникает при -> InsertCampaignNewsletterSubscriberTrack (campaignSubscriberTrack); что мне делать ??? Может ли кто-нибудь сказать мне, где я ошибаюсь?
Я не понял, что это значит .. Может ли сказать вам пример? –
@supriyasalunkhe Я обновил свой ответ –