উত্তর:
আপনি যদি এসকিউএল সরাসরি চালিত করতে না চান তবে সবচেয়ে ভাল উপায় হ'ল যে কোনও () ব্যবহার করা । এটি কারণ কারণ যে কোনও () এটি মিল খুঁজে পাওয়ার সাথে সাথে ফিরে আসবে। আরেকটি বিকল্প হ'ল কাউন্ট () , তবে ফিরে আসার আগে প্রতিটি সারি পরীক্ষা করতে হবে।
এটি কীভাবে ব্যবহার করা যায় তার একটি উদাহরণ এখানে:
if (context.MyEntity.Any(o => o.Id == idToMatch))
{
// Match!
}
এবং ভিবি.নেটে
If context.MyEntity.Any(function(o) o.Id = idToMatch) Then
' Match!
End If
T
এমন কোনও ইন্টারফেসের প্রতি সীমাবদ্ধ থাকেন IEnumerable
এবং যা রয়েছে এমন একটি বস্তু ফেরত দেয় তবে Id
আপনার জেনেরিক ফাংশনটি ব্যবহার করতে সক্ষম হওয়া উচিত IsExists<T>()
।
পারফরম্যান্সের দৃষ্টিকোণ থেকে, আমি অনুমান করি যে উপস্থিত থাকা কমান্ডটি ব্যবহার করে সরাসরি এসকিউএল কোয়েরি উপযুক্ত হবে appropriate এখানে সত্তা ফ্রেমওয়ার্ক সরাসরি SQL এর কিভাবে চালানো জন্য দেখুন: http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework- 4.aspx
আমাকে এমন একটি দৃশ্য পরিচালনা করতে হয়েছিল যেখানে নতুন ডেটা রেকর্ডে ডুপ্লিকেট সরবরাহের শতাংশের পরিমাণ খুব বেশি ছিল এবং ডুপ্লিকেটগুলি পরীক্ষা করার জন্য বহু হাজারে ডাটাবেস কল করা হয়েছিল (সুতরাং সিপিইউ 100% এ অনেক সময় প্রেরণ করেছিল)। শেষ পর্যন্ত আমি স্থির করেছিলাম 100,000 সর্বশেষ রেকর্ড স্মরণে রাখা আছে ached এসকিউএল ডাটাবেসের বিপরীতে লিনকিউয়ের সাথে তুলনা করার সময় আমি ক্যাশেড রেকর্ডগুলির বিপরীতে ডুপ্লিকেটগুলি পরীক্ষা করতে পারি এবং তারপরে ডাটাবেসে কোনও সত্যিকারের নতুন রেকর্ড লিখি (পাশাপাশি সেগুলি ডেটা ক্যাশে যুক্ত করি, যা আমিও এর দৈর্ঘ্য পরিচালনাযোগ্য রাখতে বাছাই এবং ছাঁটা হয়েছে)।
দ্রষ্টব্য যে কাঁচা ডেটা একটি সিএসভি ফাইল ছিল যাতে অনেকগুলি পৃথক রেকর্ড রয়েছে যা পার্স করতে হয়েছিল। প্রতিটি টানা ফাইলের রেকর্ডগুলি (যা প্রতি 5 মিনিটে প্রায় 1 হারে আসে) যথেষ্ট পরিমাণে ওভারল্যাপ করে, তাই ডুপ্লিকেটের উচ্চ শতাংশ।
সংক্ষেপে, আপনার যদি টাইমস্ট্যাম্প করা কাঁচা ডেটা আসছে, বেশ কিছুটা যথাযথভাবে, তবে মেমোরি ক্যাশে ব্যবহার করা রেকর্ড সদৃশতা পরীক্ষায় সহায়তা করতে পারে।
আমি জানি এটি একটি খুব পুরানো থ্রেড তবে কেবল নিজের মতো কারোরই এই সমাধানটির প্রয়োজন হয় তবে ভিবি.নেটে এখানে উপরের উত্তরের ভিত্তিতে আমি কী ব্যবহার করেছি তা এখানে রয়েছে।
Private Function ValidateUniquePayroll(PropertyToCheck As String) As Boolean
// Return true if Username is Unique
Dim rtnValue = False
Dim context = New CPMModel.CPMEntities
If (context.Employees.Any()) Then ' Check if there are "any" records in the Employee table
Dim employee = From c In context.Employees Select c.PayrollNumber ' Select just the PayrollNumber column to work with
For Each item As Object In employee ' Loop through each employee in the Employees entity
If (item = PropertyToCheck) Then ' Check if PayrollNumber in current row matches PropertyToCheck
// Found a match, throw exception and return False
rtnValue = False
Exit For
Else
// No matches, return True (Unique)
rtnValue = True
End If
Next
Else
// The is currently no employees in the person entity so return True (Unqiue)
rtnValue = True
End If
Return rtnValue
End Function
আমার এটি নিয়ে কিছুটা সমস্যা হয়েছিল - আমার এন্টিকিতে তিনটি বৈশিষ্ট্য রয়েছে (3 টি কলাম সহ পিকে) এবং আমি কলামগুলির প্রত্যেকটি চেক করতে চাইনি কারণ এটি কুৎসিত হবে। আমি এমন একটি সমাধান সম্পর্কে ভাবলাম যা সমস্ত সত্তা নিয়ে সর্বদা কাজ করে।
এর আর একটি কারণ হ'ল আমি প্রতিবার আপডেটএক্সেপশন ধরতে পছন্দ করি না।
মূল বৈশিষ্ট্যের মানগুলি পেতে কিছুটা প্রতিফলন প্রয়োজন।
কোডটি এক্সটেনশন হিসাবে প্রয়োগটি সহজ হিসাবে ব্যবহার করা হয়েছে:
context.EntityExists<MyEntityType>(item);
একবার দেখুন:
public static bool EntityExists<T>(this ObjectContext context, T entity)
where T : EntityObject
{
object value;
var entityKeyValues = new List<KeyValuePair<string, object>>();
var objectSet = context.CreateObjectSet<T>().EntitySet;
foreach (var member in objectSet.ElementType.KeyMembers)
{
var info = entity.GetType().GetProperty(member.Name);
var tempValue = info.GetValue(entity, null);
var pair = new KeyValuePair<string, object>(member.Name, tempValue);
entityKeyValues.Add(pair);
}
var key = new EntityKey(objectSet.EntityContainer.Name + "." + objectSet.Name, entityKeyValues);
if (context.TryGetObjectByKey(key, out value))
{
return value != null;
}
return false;
}
আমি কেবলমাত্র বস্তুটি শূন্য কিনা তা পরীক্ষা করে দেখি, এটি আমার জন্য 100% কাজ করে
try
{
var ID = Convert.ToInt32(Request.Params["ID"]);
var Cert = (from cert in db.TblCompCertUploads where cert.CertID == ID select cert).FirstOrDefault();
if (Cert != null)
{
db.TblCompCertUploads.DeleteObject(Cert);
db.SaveChanges();
ViewBag.Msg = "Deleted Successfully";
}
else
{
ViewBag.Msg = "Not Found !!";
}
}
catch
{
ViewBag.Msg = "Something Went wrong";
}
কেন করবে না?
var result= ctx.table.Where(x => x.UserName == "Value").FirstOrDefault();
if(result?.field == value)
{
// Match!
}
আপনার অবজেক্টটি যা তা নির্বিশেষে এবং ডাটাবেসে কোন টেবিলের জন্য আপনার কেবলমাত্র জিনিসটি থাকা দরকার তা হল বস্তুর প্রাথমিক কী।
var dbValue = EntityObject.Entry(obj).GetDatabaseValues();
if (dbValue == null)
{
Don't exist
}
Dim dbValue = EntityObject.Entry(obj).GetDatabaseValues()
If dbValue Is Nothing Then
Don't exist
End If