0

Ef4でリポジトリを書き込もうとしているのですが、問題があります。データベースのリターンIDに最後に追加された行を返す必要があります。例: 名前、SurName を追加しましたが、最後に追加されたプライマリ ID にアクセスできません。私のリポジトリは以下です。私のリクエストは2回目の使用です。


using System.Data.Objects;


namespace FlyAnt.DAL.FrameWork.ApplicationDomainModel
{
    public interface IDomainRepository<Tmodel> : IDisposable where Tmodel : class
    {
        IQueryable<Tmodel> Fetch();
        IEnumerable<Tmodel> GetAll();
        IEnumerable<Tmodel> Find(Func<Tmodel, bool> predicate);
        Tmodel Single(Func<Tmodel, bool> predicate);
        Tmodel First(Func<Tmodel, bool> predicate);
        bool Add(Tmodel entity);
        bool Delete(Tmodel entity);
        bool Attach(Tmodel entity);
    }
    public class DomainRepository<TModel> : IDomainRepository<TModel> where TModel : class
    {

        #region IDomainRepository<T> Members
        private ObjectContext _context;
        private IObjectSet<TModel> _objectSet;

        public DomainRepository()
        {
        }

        public DomainRepository(ObjectContext context)
        {

            _context = context;

            _objectSet = _context.CreateObjectSet<TModel>();

        }
. . . . .
. . .
. .
.

  public bool Delete(Func<TModel, bool> predicate)
        {
            IEnumerable<TModel> records = from x in _objectSet.Where<TModel>(predicate) select x;
            foreach (TModel record in records)
                _objectSet.DeleteObject(record);
            return SaveChanges()>0;
        }

        public bool Add(TModel entity)
        {
            if (entity == null)
                throw new ArgumentNullException("entity");
            _objectSet.AddObject(entity);
            return SaveChanges()>0;
        }
...............
..........
......// do someting

2番目の使用方法:最後に追加されたIDまたは最後に削除されたIDを返すにはどうすればよいですか?私は以下を試してみてください:(


 public bool Delete(Func<TModel, bool> predicate)
        {
            IEnumerable<TModel> records = from x in _objectSet.Where<TModel>(predicate) select x;
            foreach (TModel record in records)
                _objectSet.DeleteObject(record);
            return _objectset.LASTDELETEDPrimaryKEY;
        }

        public bool Add(TModel entity)
        {
            if (entity == null)
                throw new ArgumentNullException("entity");
            _objectSet.AddObject(entity);
             return _objectset.LASTADDEDPrimaryKEY;
        }

よろしくお願いします...

4

1 に答える 1

0

すぐにSaveChanges()すべてがすぐに使用できるようになります。

    public int Add(TModel entity)
    {
        if (entity == null)
            throw new ArgumentNullException("entity");
        _objectSet.AddObject(entity);
        SaveChanges();

        return entity.mytable_id;
    }

追加したい場合は、値をテーブルに追加し、一方が他方に依存しているとします。次のように仮定します。

[Table1]     [Table2]
t1_id PK     ts_id PK
t2_id FK     name
name

簡単にできます:

    public void Add(TModel entity1, TModel entity2)
    {
        if (entity1 == null || entity2 == null)
            throw new ArgumentNullException("entity");

        entity1.Table2 = entity2;

        _objectSet1.AddObject(entity1);
        _objectSet2.AddObject(entity2);

        SaveChanges();
    }
于 2010-12-22T09:06:15.763 に答える