LINQ เป็น SQL Dead or Alive หรือไม่?


95

เมื่อฉันทำความรู้จักกับ LINQ เป็น SQL ดูเหมือนว่า MS กำลังดึงพรมออกจากด้านล่าง

http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx

จากการค้นคว้าเล็กน้อยของฉัน EF เป็นวิธีที่มากเกินไปสำหรับงานง่ายๆ แต่หลังจากการประกาศนี้มีจุดที่จะใช้ LINQ กับ SQL ต่อไปหรือไม่?

นอกเหนือจากอนาคตสำหรับ LINQ เป็น SQL โดยทั่วไปแล้วสิ่งนี้จะไม่ส่งสัญญาณที่ไม่ดีหรือไม่? เมื่อพิจารณาถึงความเร็วที่ MS ขว้างบิตเข้ากับกำแพงการใช้บิตใหม่ในช่วงต้นมีเหตุผลหรือไม่? (และนั่นเป็นเรื่องที่ดีแทบจะไม่เร็วสำหรับ LINQ ถึง SQL!)

สำหรับงาน LINQ to SQL ของฉันฉันคิดว่าฉันกำลังมุ่งหน้าไปที่ SubSonic!

อัปเดต: ความคิดเห็นใหม่สองสามข้อ:

http://ayende.com/Blog/archive/2008/10/31/microsoft-kills-linq-to-sql.aspx

http://codebetter.com/blogs/david.hayden/archive/2008/10/31/linq-to-sql-is-dead-read-between-the-lines.aspx


ไม่มีอะไรในประกาศนั้นกล่าวว่า LINQ หรือ LINQ เป็น SQL จะหายไป ...
Codewerks

5
@AugustLights ฉันคิดว่าสิ่งที่ประกาศบอกคือ "เราจะไม่ลบ LINQ เป็น SQL แต่เราจะเพิกเฉยต่อ EF โดยสิ้นเชิง"
Jon Limjap

จอน - นั่นคือวิธีที่ฉันอ่าน ประกาศกล่าวว่า "... Entity Framework จะเป็นโซลูชันการเข้าถึงข้อมูลที่เราแนะนำสำหรับ LINQ ไปยังสถานการณ์เชิงสัมพันธ์" นั่นแปลว่าลาก่อน LINQ เป็น SQL
rp.

4
MFC ยังไม่ตายไม่ใช่แค่ทางออกที่ต้องการ คุณยังเขียนรหัส MFC หรือไม่? VB6 ยังรองรับอยู่คุณเขียนโค้ดไหม มันเป็นแบบนี้เสมอมา MS ทำในสิ่งที่ต้องการไม่ใช่สิ่งที่คุณต้องการ
gbjbaanb

1
@rp: คุณหมายถึงอะไรภายใต้ DOA - Dead or AliveหรือDead on arrival?
abatishchev

คำตอบ:


64

1) พวกเขาไม่สามารถ "ฆ่า" Linq-to-SQL ได้เนื่องจากเป็นส่วนหนึ่งของ. net framework อยู่แล้ว สิ่งที่ทำได้คือหยุดเพิ่มคุณสมบัติลงไป นั่นไม่ได้ป้องกันนักพัฒนาหลายพันคนที่ใช้ L2S อยู่แล้วไม่ให้ขยายและปรับปรุง พื้นที่หลักบางคนมีความยุ่งยากในการสัมผัส แต่พวกเขากำลังที่แข็งแกร่งอยู่แล้วและคุณลักษณะการออกแบบที่ขาดหายไปได้อย่างง่ายดายสามารถปิดได้ที่

2) หนึ่งในเซสชัน PDC EFแสดงให้เห็นว่าพวกเขาได้เรียนรู้สองสามบทเรียนจากความล้มเหลวของ EFv1 และตอนนี้พวกเขากำลังคัดลอกและวางสินค้ามากมายจาก L2S ลงใน EF และแสร้งทำเป็นว่าเป็นสิ่งใหม่ของ EF กล่าวอีกนัยหนึ่ง L2S เวอร์ชัน 2 เพิ่งได้รับการ "เปลี่ยนชื่อ"

3) LINQ เช่นนี้ (Language Integrated Query) เป็นสิ่งที่ดีที่สุดเนื่องจากไอศกรีมหั่นบาง ๆ และสามารถใช้กับสิ่งอื่น ๆ ได้มากมายนอกเหนือจาก L2S (Linq to objects, Linq to entities, Linq to XML, Linq-to-anything ). ดังนั้นความพยายามของกลุ่ม DP ที่จะบังคับให้ผู้ใช้ L2S [จำนวนมาก] หันไปใช้เอนทิตีเฟรม [ซึ่งเป็นที่นิยมน้อยกว่าและมีข้อบกพร่องในปัจจุบัน] จึงไม่มีเหตุผลที่จะไม่เรียนรู้ Linq

ดูหัวข้อนี้ด้วย (ซึ่งเป็นสิ่งที่ฉันเชื่อว่าส่วนหนึ่งเรียกใช้บล็อกโพสต์ของ Tim): http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=4061922&SiteID=1

อัปเดต 1:ปกนิตยสาร Visual Studio ฉบับเดือนธันวาคม 2008 โดย Roger Jennings เป็นเรื่องที่น่าอ่านในหัวข้อนี้ด้วยการเปรียบเทียบ L2S กับ EF บางส่วน: http://visualstudiomagazine.com/features/article.aspx?editorialsid=2583

อัปเดต 2: Anders Hejlsberg อ้างในRedmond Developer Newsว่า " LINQ to SQL ยังไม่ตายฉันรับรองได้ว่ามันยังไม่ตายไม่มีอะไรหายไปเราไม่เคยทำอย่างนั้นและเราจะไม่มีวัน "

http://reddevnews.com/blogs/weblog.aspx?blog=3016


14
ผู้สร้าง StackOverflow ใช้ Linq กับ SQL เป็น ORM ที่พวกเขาเลือก เห็นได้ชัดว่าพวกเขาตัดสินใจว่าผลประโยชน์มีมากกว่าอันตราย
Robert Harvey

ยังมีอยู่จริงไหม ฉันได้ยินมาว่า StackOverflow ย้ายออกจาก L2S แต่ดูเหมือนจะไม่พบข้อมูลนี้
Aaron

2
@Aaron ใช่พวกเขาใช้ SQL ที่เขียนด้วยมือด้วยไมโคร ORM ของตัวเองที่เรียกว่า Dapper พวกเขาอาจยังคงใช้ LINQ-to-SQL ในส่วนที่เป็นที่นิยมน้อยกว่าของไซต์
CMircea

28

มีความคลุมเครือสำหรับคำถามของคุณที่ต้องได้รับการแก้ไข

LINQ! = LINQ เป็น SQL

มีเทคโนโลยีและผู้ให้บริการ LINQ มากมาย:

  • Linq เป็น SQL;
  • Linq ถึงเอนทิตี;
  • Linq ถึง Objects;
  • Linq เป็น XML;

... และนี่เป็นเพียงของจาก Microsoft มีผู้ให้บริการที่ไม่ใช่ MS เช่นกันรวมถึง NHibernate

โพสต์บล็อกที่คุณเชื่อมโยงพูดถึง Linq กับ SQL เท่านั้น

ข้อได้เปรียบที่สำคัญของ LINQ คือคุณสามารถเรียนรู้และใช้ไวยากรณ์แบบสอบถามเดียวและนำมาใช้ซ้ำในเทคโนโลยีต่างๆได้

ด้วยเหตุนี้ฉันจึงขอแนะนำว่าการขาดอนาคตของ "Linq To SQL" นั้นไม่เกี่ยวข้องเนื่องจากทักษะที่คุณได้รับในการเขียน LINQ Queries จะสามารถถ่ายโอนไปยังเครื่องมืออื่น ๆ ได้ในอนาคต


ไวยากรณ์ LINQ 2 SQL มีความคล้ายคลึงกับ Entity Framework มากพอที่คุณสามารถเดินระหว่างทั้งสองได้อย่างง่ายดาย
Jason Short

คำถามของเขายังคงถูกต้องแม้ว่าการนำ LINQ ไปใช้งานจริงกับ SQL มีข้อดีบางประการที่ทำงานกับ SQL Server
Tor Haugen

21

เราไม่ได้ฆ่า LINQ เป็น SQL เรากำลังเพิ่มประสิทธิภาพสำหรับ EF แต่ LINQ เป็น SQL จะไม่ถูกฆ่าอย่างแน่นอน :)

- สก็อต / ไมโครซอฟท์


ฮ่า ๆ. นี้ทำให้ฉันแตก คุณต้องได้รับการอนุมัติจาก Microsoft เพื่อแถลงต่อสาธารณะหรือไม่ : p
Kolob Canyon

เอ๊ะ? ในปี 2009 นั่นเป็นข้อความที่ทีมมีปัญหาทำให้ฉันต้องแก้ไข ... ในฐานะผู้จัดการผลิตภัณฑ์ของ. net: D
Scott Barnes

13

คุณไม่เพียง แต่ควรเรียนรู้ Linq (System.Linq.Enumerable และ System.Linq.Queryable) คุณจะต้องเรียนรู้การปรับปรุงภาษาโปรแกรมสำหรับภาษา. net ของคุณ

ใน C # 3.0 ได้แก่ :

  • วิธีการขยาย (วิธีการคงที่ที่มีคำสำคัญนี้ในพารามิเตอร์แรก)
  • ประเภทที่สรุปของคอมไพเลอร์ (var)
  • ไวยากรณ์ Lambda (ซึ่งสร้างวิธีการที่ไม่ระบุชื่อหรือนิพจน์ขึ้นอยู่กับบริบท)
  • ตัวเริ่มต้น
  • การใช้งานคุณสมบัติเริ่มต้น (ชวเลข)

อ่านเพิ่มเติมที่นี่


ใน VB 9.0 มีเวทย์มนตร์ XML แบบอินไลน์และสิ่งอื่น ๆ อีกมากมาย (หลายอย่างคล้ายกับรายการด้านบนสำหรับ C #)

อ่านเพิ่มเติมที่นี่


ว้าวฉันต้องมีวันที่แท้จริงจริงๆ เฉพาะการตีความประโยคที่เป็นคำถามนอกบริบทอย่างเข้มงวดจริงๆคำตอบของฉันก็สมเหตุสมผลหรือไม่
Amy B

@David B เออ .. ฉันก็แบบนี้เป็นคำตอบที่โอเคฉันไม่เห็นว่ามันจะตอบคำถามนี้อย่างไร lol
mmcdole

1
มันได้รับการโหวตขึ้นเรื่อย ๆ ฉันเดาว่าบางคนต้องการดูข้อมูลในลิงก์ ... หากคุณชอบคำตอบนี้คุณอาจชอบคำตอบที่ดีกว่าของฉันที่นี่: stackoverflow.com/questions/471502/what-is-linq/471592#471592
Amy B

8

ฉันไม่เข้าใจโดยสุจริตว่าในบทความที่คุณอ่านว่า link2sql ตายแล้วไปไหน

ในบล็อกโพสต์ที่คุณเชื่อมโยงไปนั้นระบุว่า:

เรากำลังรับฟังลูกค้าเกี่ยวกับ LINQ เป็น SQL และจะพัฒนาผลิตภัณฑ์ต่อไปตามข้อเสนอแนะที่เราได้รับจากชุมชนเช่นกัน

สำหรับฉันสิ่งนี้อ่านว่า LINQ เป็น SQL จะได้รับการพัฒนาและรองรับในอนาคต ฉันสงสัยว่าทำไมคุณถึงคิดว่ามันตายแล้ว?


7

จริงอยู่ที่ฉันคิดว่าตัวเลือกระหว่าง LINQ ถึง SQL, LINQ ไปยังเอนทิตีและ LINQ เพื่อ [แทรกออร์มของบุคคลที่สาม] ที่นี่ให้ระบบนิเวศที่สมบูรณ์แบบของวิธีการเข้าถึงข้อมูลชั้นที่นักพัฒนาซอฟต์แวร์สามารถเลือกได้ ผู้ให้บริการบุคคลที่สามเช่น NHibernate, LLBLGen และแม้แต่ Subsonic (ไม่แน่ใจว่าพวกเขาจะเสนอผู้ให้บริการ LINQ หรือไม่) จะทำให้การแข่งขันดีขึ้นและน่าสนใจยิ่งขึ้น

ดังที่กล่าวมาจะเป็นเรื่องน่าเศร้าอย่างยิ่งที่ Microsoft จะละทิ้ง LINQ เป็น SQL โดยเฉพาะอย่างยิ่งเนื่องจากมีสิ่งต่อไปนี้ที่ดี - แม้แต่ StackOverflow ก็ถูกสร้างขึ้น


6

โพสต์บล็อกที่น่าสนใจเกี่ยวกับเรื่องนี้ และบางข้อมูลที่เกี่ยวข้องเกี่ยวกับการโพสต์ Stackoverflow

ส่วนสำคัญพื้นฐานดูเหมือนจะเป็นความคิดเห็นที่เกิดขึ้นในบล็อกของ adho.netที่ระบุว่า Entity Framework เป็นสิ่งเดียวที่จะได้รับเวลานักพัฒนาซอฟต์แวร์หลักสำหรับ Visual Studio 2010 และ Dot Net 4

คำตอบของฉันคือ - DUH เราทุกคนรู้เรื่องนี้แล้ว Microsoft กล่าวย้อนกลับไปที่ PDC 2007 อย่างเปิดเผยว่า LINQ to SQL เป็นรุ่นระยะสั้นสำหรับ SQL Server เนื่องจากไม่มีเรื่องราว LINQ อื่น ๆ ใน SQL Server ใช้งานได้กับ SQL Server เท่านั้น คุณไม่สามารถเขียน LINQ ไปยังผู้ให้บริการ SQL ได้ - ไม่มีโมเดลสำหรับมัน เป็นเทคโนโลยีที่ไม่สามารถขยายได้

Entity Framework เป็นวิธีเดียวจาก Microsoft ในการสร้าง LINQ Provider Entity Framework กลายเป็นสิ่งที่ตรงกันข้ามกัน แต่ฉันคิดว่าส่วนหนึ่งเป็นผลมาจากการที่ LINQ เป็น SQL มีประสบการณ์โปรแกรมเมอร์ที่ดีขึ้นในปัจจุบัน Entity Framework จะจับและแซง LINQ ไปยัง SQL เนื่องจากเป็นเครื่องมือ ORM / Mapping แห่งอนาคตจาก Microsoft

แก้ไข - ฉันเพิ่งเขียนรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ในบล็อกของฉัน

EDIT2 - IQueryable Provider - ไม่ใช่สิ่งเดียวกับ LINQ กับผู้ให้บริการ SQL คุณสามารถเขียน IQueryable Provider ของคุณเองสำหรับสิ่งที่คุณต้องการ คุณไม่ได้รับการสนับสนุนจากนักออกแบบหรือการสร้างโมเดล ไม่มีโมเดลนักออกแบบ gui ที่ฉันรู้จักสำหรับการเชื่อมโยงกับ LINQ กับการสร้างโมเดล SQL


1
Re: "คุณไม่สามารถเขียน LINQ ไปยังผู้ให้บริการ SQL ได้ - ไม่มีโมเดลสำหรับมัน" ดีมีคือ เป็นเพียงการที่พวกเขาตัดสินใจที่จะทำให้สมาชิกที่จำเป็นเป็นส่วนตัวในนาทีสุดท้ายเพื่อให้ EF ได้เปรียบ ดูblogs.msdn.com/mattwar/archive/2007/05/31/…
KristoferA

1
ขออภัยลิงค์ก่อนหน้าควรเป็นblogs.msdn.com/mattwar/archive/2008/05/04/…
KristoferA

ขอบคุณ - ไม่ได้อ่านโพสต์นั้น ฉันรู้ว่ามี API อยู่ภายใน แต่ไม่รู้ว่าเคยเผยแพร่ความรู้สู่สาธารณะหรือไม่
Jason Short

1
บล็อกเดียวกัน ( blogs.msdn.com/mattwar ) ยังมีบทความที่สมบูรณ์ (พร้อมตัวอย่าง) เกี่ยวกับวิธีการเขียนผู้ให้บริการและผู้ให้บริการ L2S ที่ดาวน์โหลดได้แบบเสียบปลั๊กซึ่งคุณอาจพบว่ามีประโยชน์
KristoferA

ไม่สำคัญว่าคุณจะสามารถแฮ็คได้หรือไม่ - MS ไม่รองรับอย่างเป็นทางการ คุณไม่มีการรวม VSIP สำหรับมัน คุณไม่สามารถรับโลโก้สำหรับแอปของคุณ ...
Jason Short

5

ฉันเดาว่าฉันไม่เห็นปัญหาที่นี่จริงๆ จากบทความที่คุณเชื่อมโยง:

เรากำลังรับฟังลูกค้าเกี่ยวกับ LINQ เป็น SQL และจะพัฒนาผลิตภัณฑ์ต่อไปตามข้อเสนอแนะที่เราได้รับจากชุมชนเช่นกัน

ฉันพลาดอะไรไปรึเปล่า? อะไรให้ความประทับใจของ LINQ ต่อ SQL ที่ตายเมื่อมาถึง



4

มีใครจำ VB6 ได้บ้าง? ไม่ว่าคุณจะเกลียดหรือรักมันเป็นการส่วนตัว Microsoft ขายได้หลายล้านเล่มและธุรกิจต่างๆใช้เงินหลายล้านดอลลาร์ในการเขียน VB6 หลายล้านบรรทัด เกิดอะไรขึ้นต่อไป?

  • Microsoft ยังคงสนับสนุน VB6 (ประเภท - ไม่ใช่ IDE)
  • และไมโครซอฟท์ยังคงบอกว่าพวกเขากำลังฟังลูกค้า VB6 แม้กระทั่งตอนนี้ ( ในวันที่ 9 กันยายน )
  • แต่ลูกค้า VB6 มีความสุขหรือไม่? ไม่ใช่ตั้งแต่ปี 2002 4 ปีหลังจากเปิดตัว VB6
  • ทำไมจะไม่ล่ะ? เส้นทางการอัพเกรดสำหรับการลงทุนรหัสของคุณกับเทคโนโลยีทดแทน VB.Net มีราคาแพง

ดังนั้นให้พิจารณาบทเรียนนั้น สำหรับฉันแล้วดูเหมือนว่าการสนับสนุน LinqToSQL จะค่อนข้างไม่พอใจ พวกเขาจำเป็นต้องสนับสนุนเนื่องจากอยู่ในกรอบงาน. NET ปัจจุบัน แต่จะอยู่ใน. NET 5, 6, 7 ... ? แค่คิดว่าสิ่งนั้นสำคัญกับคุณมากแค่ไหน (สำหรับทั้งหมดที่ฉันรู้มันไม่สำคัญสำหรับคุณเลย)


สิ่งที่ดีที่สุดสำหรับฉันคือ adam.net ที่บริสุทธิ์ด้วย OracleConnection และ SqlConnection เพราะผู้ให้บริการนี้และ System.Data.DataSet ไม่มีวันตาย เป็นฐานของข้อมูลแบบตาราง ส่วนตัวฉันชอบ EF แต่ DataSet มืออาชีพยังคงเป็นมาตรฐาน
pedrofernandes

3

บางทีคุณไม่ควรกังวลกับการเรียนรู้ Linq เป็น SQL แต่ยังมี Entities Linq ที่พวกเขาจะเก็บไว้


1
แนวทาง EF ในปัจจุบันมีปัญหาร้ายแรงบางประการไม่น้อยก็คือการบังคับใช้ระดับพื้นฐาน ฉันคาดว่า EFvNext จะดูแตกต่างกันมากในสถานที่ต่างๆ ถึงเวลานั้นฉันขอแนะนำให้ใช้ตัวเลือกที่ง่ายที่สุด: L2S - หรือ nHibernate ;-p
Marc Gravell

1
เมื่อคุณเข้าใจ LINQ แล้วฉันขอแนะนำว่า "การเรียนรู้" LINQ กับ SQL เป็นเรื่องเล็กน้อย เป็นเพียงกรณีของการเพิ่มรายการคลาส LINQ ไปยัง SQL ในโครงการของคุณและลากตารางสองสามตารางไปยังตัวออกแบบ
Richard Ev


3

เห็นได้ชัดว่า 2 ORM เป็นหนึ่งในหลาย ๆ กล่องเครื่องมือของ Microsoft แต่สำหรับฉันแล้วดูเหมือนว่าจะเลือกกรอบงานผิดด้วยเหตุผลที่ไม่ถูกต้องทั้งหมด ความจริงที่ว่าทีม C # ทำงานที่ทีม ADO.NET ควรจะทำในเวลาที่สั้นกว่ามากและทำงานได้ดีกว่านั้นยากที่จะกลืนสำหรับทีม ado.net ไม่ใช่ว่าฉันรู้การทำงานภายในของ 2 เฟรมเวิร์ก แต่ฉันคิดว่ามันจะเร็วกว่ามากในการอัพเกรดข้อบกพร่องที่ linq2sql มีให้เป็นเอนทิตีเฟรมเวิร์ก

ดูเหมือนจะมีการเมืองเข้ามาเกี่ยวข้องมากเกินไปและฉันคิดว่านี่เป็นการทำร้ายชื่อเสียงของ asp.net อย่างมากเนื่องจากฉันไม่ไว้วางใจในกรอบของเอนทิตีนั้นจะทำให้เราได้รับประสบการณ์ที่เป็นมิตรกับผู้ใช้เช่นเดียวกับ Linq2sql นอกจากนี้ทีม adm.net ยังสามารถเรียนรู้ทักษะการสื่อสารบางอย่างจากทีม mvc ของ asp.net เนื่องจากการชี้แจงเกี่ยวกับปัญหานั้นคลุมเครือ

คงจะสนุกดีที่ได้เรียนรู้ว่า Scott Gu และทีม MVC ของเขายืนอยู่ที่นี่เพราะตัวอย่างส่วนใหญ่ใช้ Linq2Sql


2

เป็นเรื่องแปลกอยู่เสมอที่ Linq 2 Sql และ Entity Framework มีพื้นที่ทับซ้อนกันมาก ฉันคิดว่าเหตุผลเดียวที่ L2S เคยสร้างมันลงใน. NET 3.5 เพราะมีข้อสงสัยอย่างมากว่า EF จะได้เห็นแสงสว่างของวัน ตอนนี้ EF1 หมดแล้วไม่ว่าจะเป็น v1 ที่หยาบมากก็ไม่จำเป็นต้องใช้ L2S อีกต่อไป


2

(ไม่ StingyJack, LINQ ไปยัง SQL ไม่ใช้กรอบงานเอนทิตี)

อย่างไรก็ตามฉันคงไม่กังวล Tim ระบุว่าพวกเขากำลังรับฟังลูกค้าเกี่ยวกับ LINQ กับ SQL เมื่อพิจารณาจากความกระตือรือร้นที่ฉันเห็นสำหรับ L2S ลูกค้า (นั่นคือเรา) จะพูดในสิ่งที่พวกเขาคิด

และตามที่ KristoferA ชี้ให้เห็นว่าพวกเขาไม่สามารถ 'ฆ่า' L2S ได้จริงเพียงแค่หยุดมันเท่านั้น และ L2S เมื่อขัดแล้วไม่ต้องการการพัฒนาเพิ่มเติมมากนัก ด้วยผู้ให้บริการ L2S ความก้าวหน้าใด ๆ ใน LINQ ควรมีอยู่ใน L2S เช่นกัน ดังนั้นทางเลือกจะยังคงเป็นของเรา


พวกเขาสามารถฆ่ามันได้โดยไม่รวมไว้ใน Dot Net 4 ซึ่งควรจะเป็นการติดตั้งแบบเคียงข้างกัน ซึ่งหมายความว่าแอป dot net 4 จะไม่สามารถเข้าถึงได้โดยไม่ต้องติดตั้ง 3.5SP1 ในเครื่องเดียวกัน - ไม่รู้ว่าจริงหรือไม่
Jason Short

มีใครจำ VB6 ได้บ้าง? Microsoft ยังคงสนับสนุน VB6 (ชนิดของ) พวกเขายังคงพูดว่าพวกเขากำลังฟังลูกค้า VB6 อยู่แม้กระทั่งตอนนี้ แต่เรามีความสุขไหม? ไม่ได้เส้นทางการอัปเกรดเพื่อรับรหัสของเราไปยังเทคโนโลยีทดแทน VB.Net นั้นมีราคาแพง ลองพิจารณาบทเรียนนั้น: และคิดว่า LinqToSQL จะอยู่ใน. NET 4, 5, 6 ... หรือไม่และมีความสำคัญกับคุณมากแค่ไหน
MarkJ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.